我在一个非常大的仓库(apx 100 gb)上运行git gc --aggressive
。它已经运行了两个晚上,并且几个小时后,它一直停留在:“压缩对象:99%(76496/76777)”
如果我 Ctrl - C 这个过程,会有什么后果?我的回购会无法使用吗?我的直觉说不,但我想要一些意见。谢谢!
答案 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
)完成:
当1c192f3(
gc --aggressive
:让它真正具有侵略性 - 2007-12-06)使--depth=250
成为默认值时,它并没有真正解释背后的原因,尤其是专业人士和--depth=250
的利弊。以下Linus的旧邮件详细说明了这一点 长话短说,
--depth=250
是一个磁盘保护程序和性能杀手 不是每个人都同意这种侵略性 让用户配置它。
这有助于避免在大型回购时运行该命令时遇到的“冻结”问题。