所以目前我有一个看似非常复杂的问题,我需要一些帮助,如何解决它而无法将二进制文件移动到CDN / Dropbox等。评估此问题时请注意删除图像/ pdf遗憾的是,将它们放在Dropbox或其他一些外部存储器中并不是一种选择。
所以当前的问题是我有几百个存储库,每个存储库都有几千个提交,每个repo一般都有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等),但只保留二进制文件的最新版本。但是我不确定如何实现这一点,我可以做一个
我在find -name "*.pdf"
;做
git filter-branch --index-filter“git rm -rf --cached --ignore-unmatch $ i”HEAD
DONE
例如,但我不确定这是不是最好的办法,因为它可能需要永远完成所有不同的资产类型。
这里的主要目标是通过仅保留历史记录中的二进制文件的1个版本来减小大小,以便包文件的大小更小,历史记录中所有先前删除的二进制文件也可以被删除,这是我100%罚款但是也不确定如何以自动化方式做到这一点。
任何帮助都将不胜感激。
答案 0 :(得分:1)
由于您有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