Git Gui:始终出现“此仓库目前大约有320个松散的对象。”

114
每次我在特定项目上启动Git Gui时,都会收到这条消息:

此仓库当前有大约320个松散的对象。

输入图像描述

然后,我点击Yes,接下来会出现这个对话框:

enter image description here

事实上,当我再次打开Git Gui时,我得到完全相同的消息,再次提到大约320个松散的对象!好像点击Yes根本没有任何效果。

1
你能发布 git count-objects -v 的输出吗? - CB Bailey
可能是 如何在运行'git gui'时跳过“Loose Object”弹出窗口? 的重复问题。 - TheCodeArtist
5
谢谢,我在那里找到了答案。像这条评论中提到的那样,从命令行显式运行 git gc 对我很有效。 - sashoalm
当在压缩对象数据库时出现取消链接错误时,请参考以下链接:https://dev59.com/Mmgt5IYBdhLWcg3w2A_7 - 0 _
2个回答

106

正如如何跳过运行“git gui”时的“Loose Object”弹窗中被接受的答案所建议的那样,简单地跳过弹窗忽略了Git正在向您传达可能存在的性能问题。这可以通过从命令行运行以下命令来修复:

cd path/to/your/git/repo
git gc --aggressive

根据git help gc的输出:

运行一些仓库内的日常维护任务,例如压缩文件修订(以减少磁盘空间并提高性能)和删除从之前调用git add而可能创建的无法访问的对象。

鼓励用户定期在每个仓库中运行此任务,以维护良好的磁盘空间利用率和操作性能。

--aggressive

通常情况下,git gc 运行非常快,并提供良好的磁盘空间利用率和性能。但启用此选项将导致git gc更积极地优化仓库,代价是花费更多时间。此优化的效果是持久的,因此这个选项只需要偶尔使用;每隔几百个变更集左右。

这应该可以让提示窗口暂时不再弹出。


25
有趣的是,仅仅在命令行中运行“git gc”就为我解决了问题。也许“git gui”运行了类似于“git gc --extra-unaggressive”的命令 :) - sashoalm
2
看起来git gui调用了"C:\Program Files\Git\bin\sh.exe" "C:/Program Files/Git/libexec/git-core/git-repack" -a -d -l - sashoalm
41
git gc 无法解决问题时,似乎 git prune 可以解决。 - Mahn
2
通常情况下,您不希望使用“--aggressive”选项运行;这会导致git重新计算增量,这通常是无效且非常耗时的。请参见此文章——man页面是误导性的。在这种情况下,可能只需要使用普通的git gc命令就足够了。 - Jeff Clites
18
必须使用“--prune=all”命令才能消除这个信息。在命令行中使用“git gc” 或选项“--aggressive”或“--prune”都不能解决问题。 - daw
显示剩余4条评论

10

我使用了以下命令:

git gc --prune=now

执行完成后就不再出现太多松散对象的警告信息。

参考来源: https://git-scm.com/docs/git-gc


4
不得不说这是适合我的解决方案。奇怪的是,"git gc --aggressive" 命令并没有消除警告(在UI上点击似乎只执行了简单的 "git gc" 操作)。 - saeraphin

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