减少git存储库大小

时间:2010-01-22 11:09:07

标签: git git-clean

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

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

有什么建议吗?

4 个答案:

答案 0 :(得分:299)

git gc --aggressive是强制修剪过程的一种方法(确保:git gc --aggressive --prune=now)。您还有other commands来清理回购。不过不要忘了,有时git gc只能increase the size of the repo

也可以在filter-branch之后使用,以标记要从历史记录中删除的某些目录(进一步获得空间);见here。但这意味着没有人会从您的公共回购中撤离。 filter-branch can keep backup refs in .git/refs/original,以便也可以清理目录。

最后,如上所述in this commentthis question;清理reflog可以提供帮助:

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

更完整,可能更危险的解决方案是to remove unused objects from a git repository

答案 1 :(得分:81)

感谢您的回复。这是我做的:

git gc
git gc --aggressive
git prune

这似乎已经成功了。我从大约10.5MB开始,现在只有980KB。

答案 2 :(得分:7)

就我而言,我推送了几个大(> 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

注意bfg是可以使用brew安装在Linux和macOS上的工具:

brew install bfg

答案 3 :(得分:0)

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

您可能添加了一个或多个子模块,但在某个时间停止使用它,一些文件仍保留在 .git/modules 目录中。要消除多余的子模块文件,请参阅 this question

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

这些应该会对存储库大小产生很好的影响,但只要您使用 Git 子模块,例如尤其是对于大型库,您的存储库大小不应发生剧烈变化。