减少git存储库大小

sen*_*hil 267 git git-clean

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

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

有什么建议?

Von*_*onC 324

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
Run Code Online (Sandbox Code Playgroud)

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

  • 自我注意:不要忘记远程分支:http://stackoverflow.com/questions/11255802/delete-remove-binary-file-from-git-repository-is-still-large (2认同)
  • 自我提醒:不要忘记远程标签 (2认同)
  • @jww 我确认这纯粹是本地操作。它与远程仓库的大小无关。您需要直接访问该远程存储库的服务器才能执行相同操作。 (2认同)

sen*_*hil 90

谢谢你的回复.这是我做的:

git gc
git gc --aggressive
git prune
Run Code Online (Sandbox Code Playgroud)

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

  • 你可以使用`git gc --aggressive --prune = now`来修剪所有3个直到现在 (110认同)
  • `prune`总是由`gc`运行(2周前默认). (8认同)
  • 但是,当我删除 repo 然后再次克隆它时,大小仍然很大。你怎么处理? (3认同)

vin*_*zee 18

就我而言,我推送了几个大(> 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
Run Code Online (Sandbox Code Playgroud)

然后,您需要对您的分支施加压力:

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
Run Code Online (Sandbox Code Playgroud)

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

brew install bfg
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

120515 次

最近记录:

6 年,5 月 前