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

从git中删除旧的二进制版本并减小git存储库的大小,git,Git,因此,目前我遇到了一个似乎非常复杂的问题,我需要一些帮助,了解如何在不将二进制文件移动到CDN/dropbox等的情况下修复它。在评估此问题时,请注意,删除图像/PDF等并将其放入dropbox或其他外部存储中是不可取的 因此,当前的问题是,我有几百个存储库,每个存储库都有几千个提交,每个repo通常有3个分支。在我的一个测试报告中,如果我对存储库进行du-sh,它的大小大约为13gb。其中,工作目录的大小约为800mb。因此,到目前为止,我尝试缩小尺寸的方法如下: git filter-bra

因此,目前我遇到了一个似乎非常复杂的问题,我需要一些帮助,了解如何在不将二进制文件移动到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上的repository目录仍然显示为13GB大小。因此,我的下一个想法是删除所有二进制文件历史记录(jpg/pdf/png等),但只保留二进制文件的最新版本。然而,我不知道如何做到这一点,我可以做一个 对于
find-name“*.pdf”
中的i;做 git筛选器分支--索引筛选器“git rm-rf--缓存--忽略未匹配的$i”头 完成 例如,但我不确定这是否是最好的方式,因为完成所有不同的资产类型可能需要很长时间

这里的主要目标是通过在历史记录中只保留一个二进制文件版本来减小大小,这样包文件的大小就更小了,历史记录中所有以前删除的二进制文件也可以被删除,这一点我100%满意,但也不确定如何以自动方式做到这一点


任何帮助都将不胜感激。

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

git过滤器分支\
--索引筛选器“git rm--缓存--忽略不匹配的“$1”\
--prune empty--标记名筛选器cat--all | |退出
#清理和重新划分空间
rm-r.吉特/参考文献/原件
git reflog expire--expire=now--all
git gc--prune=now
git-gc--aggressive--prune=now

既然您有3个分支,为什么不为第一个
git filter分支
命令指定处理所有分支

git过滤器分支——索引过滤器\
“git rm-rf--cached--ignore unmatch path/to/max/files.pdf”---all
然后,要删除对
refs/original
的引用,我建议使用以下命令:

每个ref的git--format=“%(refname)”refs/original/|\ xargs-n1git更新参考-d
与我自己的测试一样,这可以工作,但也会彻底清除文件。目标是仅删除以前版本的二进制文件,但保持最新版本的灵活性,并仅完全删除Finalize中已删除的文件。这些文件是否仍在其他分支中引用?你有多少分支机构?通常我们会保留3个分支机构,以将分支数量降至最低,这正是由于这个问题。我们使用主分支进行主线开发,然后将主分支合并到一个测试分支,在那里对其稳定性进行评估。最后,测试分支被合并到生产分支中。一个例外是,如果要添加一个新的特性,例如,它将跨越多个sprint,那么将创建一个额外的特性分支。但是,该分支最终合并回主分支,然后删除该分支。