减少git仓库的大小


290

我试图寻找一个很好的教程,以减少回购规模,但没有找到。我该如何减少我的repo大小...大约是10 MB,但问题是Heroku仅允许50 MB,而且我的应用程序开发还遥遥无期。

我已经将常见的可疑对象(日志,供应商,文档等)添加到.gitignore中。虽然我最近才添加.gitignore。

有什么建议么?


1
我只是做到了,它使它降至2.2 mb ...非常感谢!虽然似乎没有减少对Heroku..hmm回购大小
发送-HIL

11
使用--force推送它。即使没有更改(没有新提交等),它也会覆盖内容
Marcin Gil 2010年

1
@MarcinGil-下面,VonC声明您需要访问服务器才能清理远程服务器(如果我正确解析了它)。
jww

1
如果其他读者不知道要添加些什么,则只需提供一条评论即可.gitignore,gitignore.io上有一个不错的服务,它将帮助您.gitignore根据开发环境建立一个好的产品。
布莱尔23年

Answers:


351

git gc --aggressive是强制执行修剪过程的一种方法(请确保:)git gc --aggressive --prune=now。您还可以使用其他命令来清理存储库。有时不要忘记git gc单独使用一个仓库会增加仓库的数量

它也可以在a之后使用filter-branch,以标记一些要从历史记录中删除的目录(进一步获得空间);看 这里。但这意味着没有人会从您的公开回购中撤出。filter-branch可以保留备份参考.git/refs/original,以便也可以清理该目录。

最后,如本评论问题中所述;清洁reflog可以帮助:

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

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


在另一个场景中,也见stackoverflow.com/questions/1029969/...
VonC

1
:自我提醒:不要忘了远程分支机构stackoverflow.com/questions/11255802/...
VonC

1
自我
提醒

1
除了远程引用之外,reflog是另一件事,它可能导致您尝试删除的引用被保留。 stackoverflow.com/q/27489761/1072626
vossad01 2014年

1
@jww我确认这纯粹是本地操作。它与远程仓库的大小无关。您需要直接访问该远程仓库的服务器才能执行此操作。
VonC

94

多谢您的回覆。这是我所做的:

git gc
git gc --aggressive
git prune

这似乎已经解决了问题。我最初只有10.5MB的空间,现在只有980KB以上。


8
prune始终运行gc(默认为2周前)。
2012年

117
到目前为止,您可以使用修剪来运行所有3个git gc --aggressive --prune=now
rahul286

1
但是,当我删除存储库然后再次克隆它时,它的大小仍然很大。你如何处理?
cwtuan

2

就我而言,我推送了几个大文件(> 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.