4

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

所以当前的问题是我有几百个存储库,每个存储库都有几千个提交,每个存储库通常有 3 个分支。在我的一个测试存储库中,如果我对存储库执行 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,但我不确定这是否是最好的处理方式永远完成所有不同的资产类型。

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

任何帮助,将不胜感激。

4

2 回答 2

2

既然你有 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
于 2013-07-18T09:15:44.773 回答
0

我已经成功使用了这些命令。

git filter-branch \
  --index-filter "git rm --cached --ignore-unmatch '$1'" \
  --prune-empty --tag-name-filter cat -- --all || exit

# Cleanup and reclaming space
rm -r .git/refs/original
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now

参考

于 2013-01-11T18:36:38.003 回答