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

Dmi*_*lya 13 git git-fetch git-gc

在某个时刻使用远程存储库时,我在运行时开始收到此消息git fetch origin

在后台自动打包存储库以获得最佳性能。

请参阅“git help gc”以了解手动内务管理。

警告:上次 gc 运行报告以下内容。请更正根本原因并删除 .git/gc.log。

在删除文件之前,不会执行自动清理。

警告:有太多无法触及的松散物体;运行“git prune”来删除它们。

这事儿常常发生。我找到了应该有帮助的地方git gc,但它只工作一次(或似乎工作) - 在此之后和之后git fetch origin我得到

在后台自动打包存储库以获得最佳性能。请参阅“git help gc”以了解手动内务管理。

后来情况又重复了。我还尝试删除 .git/gc.log - 它没有帮助。

我的 git 技能确实有限。为什么我会收到此警告以及如何长期解决该问题?

小智 25

这篇文章帮助了我——

git fsck
git gc --prune=now
git prune  
git gc
Run Code Online (Sandbox Code Playgroud)

并且错误应该消失。

参考 - https://medium.com/lynns-dev-blog/git-there-are-too-many-unreachable-loose-objects-c2df601b8001


tor*_*rek 5

这个特定问题是由于 Git 中的一个错误(在 2.20.0 中首次应用了修复:请参阅commit3029970275b473dbf62149887a19a6b4879528d7,它对正在发生的事情有很好的描述,但另请参阅commit095c741edd1d9604b6c285000a836721fd69f051,它具有贡献作用并已在git 2.17)。如果您使用的是有缺陷的 Git 版本,随着时间的推移,它会累积太多松散的对象。1 您可以而且应该将您的 Git 版本升级到不会让这些对象累积得如此严重的版本,但现在,当您不对存储库执行任何其他操作时,git prune只需继续手动运行即可。然后在修剪完成后手动运行。您可能也需要跑步。git gcrm .git/gc.log

(这个问题会时不时地出现,直到 Git 升级为止。)


“松动”的物体是正常的。它们的对立面是“打包”对象,存储效率更高。通常git gc会时不时地自动运行,并注意到何时适合打包松散的物品。包装过于频繁会降低效率;包装不够频繁会降低效率;git gc应该找出合适的时间但某些 Git 版本在一段时间内出现了这种情况,导致了您所观察到的问题。

这不是一个问题:它只是意味着 Git 的效率(运行速度更慢)比它没有被破坏的情况要低。