减小git存储库大小

我试图寻找一个关于减少回购大小的好教程,但没有找到。我如何减少我的回购规模…它大约是10 MB,但问题是Heroku只允许50 MB,我还没有完成我的应用程序的开发。

我已经添加了通常的嫌疑(日志,供应商,文档等)到。gitignore。虽然我最近才添加了。gitignore。

有什么建议吗?

190912 次浏览

11年后的2021年2月更新:新的git maintenance命令 (手册页)应该取代git gc可以安排


git gc --aggressive是强制进行修剪过程的一种方法(确定:git gc --aggressive --prune=now)。你也有其他命令来清理回购。不过别忘了,有时候单独的git gc可以增加回购的规模!

它也可以用在filter-branch后面,用来标记一些要从历史记录中删除的目录(进一步增加空间);看到在这里。但这意味着没有人会从你的公开回购中撤资。__ABC0可以在.git/refs/original中保留备份引用,这样该目录也可以被清理。

最后,如前所述在这个评论中这个问题;清理reflog可以帮助:

git reflog expire --all --expire=now
git gc --prune=now --aggressive

一个更完整,也可能更危险的解决方案是从git存储库中删除未使用的对象


注意,git filter-repo现在(Git 2.24+, Q4 2019)取代了过时的git filter-branch或BFG:它是一个基于python的工具,首先替换为被安装

建议:

# Find the largest files in .git:
git rev-list --objects --all | grep -f <(git verify-pack -v  .git/objects/pack/*.idx| sort -k 3 -n | cut -f 1 -d " " | tail -10)


# Strat filtering these large files:
git filter-repo --path-glob '../../src/../..' --invert-paths --force
#or
git filter-repo --path-glob '*.zip' --invert-paths --force
#or
git filter-repo --path-glob '*.a' --invert-paths --force


git remote add origin git@github.com:.../...git
git push --all --force
git push --tags --force

谢谢你的回复。以下是我所做的:

git gc
git gc --aggressive
git prune

这似乎奏效了。我一开始只有10.5MB,现在只有980kb多一点。

就我而言,我推了几个大的(>100Mb)文件,然后继续删除它们。但它们仍然在我的回购历史中,所以我必须将它们从它中删除。

诀窍在于:

bfg -b 100M  # To remove all blobs from history, whose size is superior to 100Mb
git reflog expire --expire=now --all
git gc --prune=now --aggressive

然后,你需要在你的树枝上用力:

git push origin <your_branch_name> --force

请注意: 高炉煤气是一个可以使用brew安装在Linux和macOS上的工具:

brew install bfg

这应该不会影响到每个人,但是存储库大小较大的一个半隐藏原因之一可能是Git子模块。

你可能已经添加了一个或多个子模块,但在某个时候停止使用它,并且一些文件保留在.git/modules目录中。要给出多余的子模块文件,请参见这个问题

然而,就像主存储库一样,另一种方法是导航到.git/modules中的子模块目录,并执行,例如,git gc --aggressive --prune

这些应该对存储库的大小有很好的影响,但只要你使用Git子模块,例如,特别是大型库,你的存储库大小应该不会有很大的变化。