gpt4 book ai didi

git - 从 git 中删除旧的二进制修订版并减小 git 存储库的大小

转载 作者:太空狗 更新时间:2023-10-29 13:43:52 24 4
gpt4 key购买 nike

所以目前我遇到了一个似乎非常复杂的问题,我需要一些帮助来解决它,但无法将二进制文件移动到 CDN/保管箱等。评估此问题时,请注意删除图像/pdf不幸的是,将它们放在保管箱或其他一些外部存储中不是一种选择。

所以当前的问题是我有几百个存储库,每个存储库都有几千次提交,每个存储库通常有 3 个分支。在我的一个测试 repo 协议(protocol)中,如果我对存储库执行 du -sh,它的大小约为 13gb。工作目录的大小约为 800mb。因此,到目前为止,我为减小尺寸所做的尝试如下:

git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch path/to/largest/files.pdf" HEAD
rm -rf .git/refs/original/ && git reflog expire --all && git gc --aggressive --prune
git gc --prune=now --aggressive
git repack -a -d --depth=250 --window=250

在 du -sh 上的存储库目录上方的所有测试之后,它的大小仍然显示为 13GB。所以我的下一个想法是删除所有二进制文件历史记录(jpg/pdf/png 等),但只保留二进制文件的最新版本。但是我不确定如何实现它,我可以做一个 for i in find -name "*.pdf";做 git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch $i"HEAD 完毕例如,但我不确定这是否是解决问题的最佳方式,因为完成所有不同的 Assets 类型可能需要很长时间。

这里的主要目标是通过仅保留历史记录中二进制文件的 1 个修订版来减小大小,以便打包文件的大小更小,历史记录中所有先前删除的二进制文件也可以被删除,我 100% 没问题有但也不确定如何以自动化方式做到这一点。

如有任何帮助,我们将不胜感激。

最佳答案

既然你有 3 个分支,为什么不为第一个 git filter-branch 命令指定在所有分支上工作?

git filter-branch --index-filter \
"git rm -rf --cached --ignore-unmatch path/to/largest/files.pdf" -- --all

然后要删除对 refs/original 的引用,我建议使用以下命令:

git for-each-ref --format="%(refname)" refs/original/ | \
xargs -n 1 git update-ref -d

关于git - 从 git 中删除旧的二进制修订版并减小 git 存储库的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14284370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com