阻止一个git gc --攻击性的,这是坏事吗?

zrfyljdw  于 2023-08-01  发布在  Git
关注(0)|答案(3)|浏览(125)

我在一个非常大的repo(apx 100 gb)上运行git gc --aggressive。它从两天前的晚上就开始运行了,到几个小时前,它已经卡住了:“压缩对象:99%(76496/76777)”
如果我按Ctrl-C键操作,会有什么后果?我的回购会无法使用吗?我的直觉告诉我没有,但我想听听你的意见。谢谢你,谢谢

1l5u6lss

1l5u6lss1#

git应该永远不会受到这样的干扰。如果您担心,我建议Ctrl+Z,然后运行git fsck --full,以确保系统是一致的。
有许多git-config变量可以帮助你的git-gc运行得更快。我在一个特定的大型repo上使用以下方法,但还有更多的选择可以随机尝试(或仔细研究,无论哪种)。

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

字符串
只有当您的问题是内存不足时,这些才有帮助。
请注意,Brian J Murray报告的最佳(git-gc)性能,pack.threads应该设置为您拥有的核心数量。还要注意VonC的另一个答案,它说你可以通过将gc.aggressiveDepth设置为比默认值250小的值来权衡gc性能和磁盘使用率。

dtcbnfnu

dtcbnfnu2#

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

iqjalb3h

iqjalb3h3#

注意:git 2.0(2014年第二季度)有一个有趣的演变:
“git gc --aggressive”learned“--depth”选项和“gc.aggressiveDepth”配置变量,以允许使用比内置默认值250更不疯狂的深度。
这在commit 125f814中描述,由Nguyễn Thái Ngọc Duy ( pclouds )完成:
1c192f3gc --aggressive:make it really aggressive - 2007-12-06)将--depth=250设为默认值,但并没有真正解释背后的原因,尤其是--depth=250的优缺点。
下面一封来自Linus的旧邮件详细解释了这一点。
长话短说,--depth=250是一个磁盘保护程序和性能杀手
不是每个人都同意这种侵略性。
让用户配置它。
这有助于避免在大型存储库上运行该命令时遇到的“冻结”问题。

相关问题