停止git gc - aggressive,这是件坏事吗?

时间:2011-05-20 01:28:19

标签: git git-gc

我在一个非常大的仓库(apx 100 gb)上运行git gc --aggressive。它已经运行了两个晚上,并且几个小时后,它一直停留在:“压缩对象:99%(76496/76777)”

如果我 Ctrl - C 这个过程,会有什么后果?我的回购会无法使用吗?我的直觉说不,但我想要一些意见。谢谢!

3 个答案:

答案 0 :(得分:30)

git应该始终安全,不受此类中断的影响。但是,如果您担心,我建议 Ctrl + Z ,然后运行git fsck --full以确保系统一致。

有许多git-config变量可能会帮助你的git-gc更快。我在一个特定的大型仓库中使用以下内容,但还有更多选项可供随机尝试(或仔细研究,无论哪个)。

git config pack.threads 1
git config pack.deltaCacheSize 1
git config core.packedGitWindowSize 16m
git config core.packedGitLimit 128m
git config pack.windowMemory 512m

如果您的问题是内存不足,这些只会有所帮助。

答案 1 :(得分:7)

FWIW,我刚刚通过CTRL + C中止git gc来破坏了存储库。 git fsck现在显示以下错误:

error: HEAD: invalid sha1 pointer [...]
error: refs/heads/master does not point to a valid object!
notice: No default references

还有不少

dangling commit [...]

我不会对此进行调查,但我想指出,我要避免中止git gc

答案 2 :(得分:3)

注意:git 2.0 (Q2 2014)有一个有趣的演变:

  

“git gc --aggressive”学习了“--depth”选项和“gc.aggressiveDepth”配置变量,以允许使用比内置默认值250更少的疯狂深度。

这由commit 125f814中描述,由Nguyễn Thái Ngọc Duy (pclouds)完成:

  

1c192f3gc --aggressive:让它真正具有侵略性 - 2007-12-06)使--depth=250成为默认值时,它并没有真正解释背后的原因,尤其是专业人士和--depth=250的利弊。

     

以下Linus的旧邮件详细说明了这一点   长话短说, --depth=250是一个磁盘保护程序和性能杀手   不是每个人都同意这种侵略性   让用户配置它。

这有助于避免在大型回购时运行该命令时遇到的“冻结”问题。