我试图寻找一个关于减少回购规模的好教程,但没有找到。我如何减少我的repo大小...它大约10 MB,但事情是Heroku只允许50 MB,我就没有接近完成开发我的应用程序。
我已经将通常的嫌疑人(日志,供应商,文档等)添加到.gitignore。虽然我最近只添加了.gitignore。
有什么建议吗?
答案 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 comment和this 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 子模块,例如尤其是对于大型库,您的存储库大小不应发生剧烈变化。