运行 git fetch origin 时出现 Git gc 和 git prune 警告

11

在使用远程仓库时,当我运行 git fetch origin 命令时,我开始收到以下提示:

正在后台自动压缩仓库以达到最佳性能。

请查看 "git help gc" 了解手动清理。

警告: 上次垃圾回收报告了以下问题。请纠正根本原因并删除 .git/gc.log 文件。

只有在文件被删除后,才会执行自动清理。

警告: 存在太多无法访问的松散对象; 运行 'git prune' 来删除它们。

这种情况一直发生。我找到了一些资料说应该用 git gc 命令来解决,但是似乎只起作用一次 - 在此之后和随后的 git fetch origin 命令后,我又得到了同样的提示。

正在后台自动压缩仓库以达到最佳性能。 请查看 "git help gc" 了解手动清理。

之后情况重复出现。我尝试过删除 .git/gc.log 文件,但没有起作用。

我的 Git 技能非常有限。我为什么会收到这些警告,如何才能长期解决这个问题呢?


2
你尝试过使用 git prune 或者 git gc --aggressive 吗? - jingx
1
尝试按照它所说的去做。 - matt
3个回答

23

1
感谢分享参考资料。当你阅读注释的解释时,确实会有所不同。 :) - lucasmonteiro001

5
这个问题是由于Git中的一个bug引起的(在2.20.0中首次修复:请参见提交3029970275b473dbf62149887a19a6b4879528d7,详细描述了发生了什么,但也请参见提交095c741edd1d9604b6c285000a836721fd69f051,它有一定的共同作用,并已在Git 2.17中修复)。如果您使用的是有缺陷的Git版本,则会随着时间的推移积累太多的loose对象。1您可以并且应该升级Git版本,以避免这些对象积累得太多,但现在,只需在不使用代码库时手动运行git prune。然后在prune完成后手动运行git gc。您可能还需要运行rm .git/gc.log
(问题会时不时地回来,直到Git被升级。)
“Loose”对象是正常的。它们的相反物是“packed”对象,存储更有效。通常情况下,git gc会不时自动运行,并在适当的时候注意到打包loose对象。过于频繁打包会降低效率;不经常打包会降低效率;应该让git gc找到合适的时间点。但是,某些Git版本有一段时间存在此问题,导致您观察到的问题。
这不是一个大问题:这只意味着Git比如果没有出现问题就变得不那么高效(运行速度变慢)。

如果没有关于受影响的 Git 版本的任何信息,或者至少有关于该错误的更多信息,比如一个错误报告的链接,那么这并不是很有帮助。现在,没有人能够知道你提到的错误是否导致了他们的问题。 - Daniel McIntosh
@DanielMcIntosh:实际情况非常复杂。最初的修复在2.20.0中。无论如何,正如我所说,这并不是一个真正的问题。你知道你有它的方式是,你会得到与问题描述中完全相同的投诉序列。如果你得到其他投诉,那么你可能有一个稍微不同的错误。尽管如此,我会链接到这个修复程序。 - torek

0

将Git更新到最新版本,对我来说有效地解决了这个错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接