我试图寻找一个关于减少 repo 大小的好教程,但没有找到。如何减小我的 repo 大小...大约 10 MB,但问题是 Heroku 只允许 50 MB,而且我还没有完成我的应用程序的开发。
我已经将常见的嫌疑人(日志、供应商、文档等)添加到 .gitignore 中。虽然我最近才加了 .gitignore 。
有什么建议么?
十一年后的 2021 年 2 月更新:新git maintenance
命令(手册页)应该取代git gc
,并且可以安排。
原始:git gc --aggressive
是强制进行修剪过程的一种方法(可以肯定:)git gc --aggressive --prune=now
。你也有其他命令来清理 repo。不过不要忘记,有时git gc
单独可以增加 repo 的大小!
它也可以在 , 之后使用filter-branch
,以标记一些要从历史记录中删除的目录(进一步增加空间);看 这里。但这意味着没有人会从您的公共回购中撤出。filter-branch
可以将备份 refs 保存在 中.git/refs/original
,以便也可以清理该目录。
git reflog expire --all --expire=now
git gc --prune=now --aggressive
一个更完整但可能更危险的解决方案是从 git 存储库中删除未使用的对象
感谢您的回复。这是我所做的:
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
注意:bfg是一个可以使用 brew 安装在 Linux 和 macOS 上的工具:
brew install bfg
这不应该影响每个人,但是存储库大小较大的半隐藏原因之一可能是 Git 子模块。
您可能已经添加了一个或多个子模块,但有时停止使用它,并且一些文件仍保留在.git/modules
目录中。要使多余的子模块文件消失,请参阅此问题。
但是,就像主存储库一样,另一种方法是导航到 中的子模块目录.git/modules
,然后执行一个,例如git gc --aggressive --prune
.
这些应该会对存储库大小产生很好的影响,但是只要您使用 Git 子模块,例如特别是大型库,您的存储库大小就不会发生剧烈变化。