“自动打包版本库以获得最佳性能”是什么意思?

我的git回购存在问题。 在过去的几天,每当我推送到服务器,我得到这个消息:“自动打包存储库的最佳性能”,它似乎并没有消失,并返回壳。

我也尝试检查出一个新的分支,然后在我之前的分支做rebase,然后做git gc删除未使用的历史对象,然后做了推,但仍然出现这个消息。 请让我知道我的回购是怎么回事。

简短的版本:它意味着什么,如果你让它完成,一切都会好的。

在大多数可能会增加存储库中松散对象(包括推送)的操作期间,Git会调用git gc --auto 。 如果有足够的松散对象(默认情况下,至less6700),它会调用git repack -d -l来打包它们。 如果有太多的独立包装,它们也会重新包装成一个。

一个包是一个增量压缩的单个文件,包含大量的对象。 将对象存储在包中会更有效率,但是打包(压缩)对象需要一些时间,所以Git最初会创build松散的对象,然后通过自动调用git gc --auto来批量打包。

如果让Git完成重新包装,这将不会再发生一段时间。 它确实需要一段时间,特别是如果你有很多大的二进制对象,但是如果它触发的话,这是一个迹象,可能会大大减less回购的磁盘空间。 如果你真的不希望它发生,你可以改变configuration参数gc.auto 。 如果你把它增加到比6700更大的东西,它会发生得不那么频繁,但是要花费更长的时间。 如果减less它,它仍然必须做你目前的重新包装,但随后会更频繁地发生,并更快完成。 如果将其设置为0,则将禁用自动重新打包。

请参阅man git-gc (在--auto下)和man git-config (在gc.auto下)以获取更多信息。

要禁用一个项目:

 cd your_project_dir git config gc.auto 0 

全局禁用:

 git config --global gc.auto 0 

虽然Jefroni是正确的,有时自动包装只需要一定的时间来完成,如果自动包装消息持续多天,如OP所述, 这个问题很有可能是git的清理丢失悬挂对象。

要查看悬挂对象是否触发正在进行的自动包装消息,请尝试运行git fsck 。 如果你得到一个长长的提交列表,你可以用它来清理它们

git gc --prune=now

我通常必须每隔2-3个月在回购单上运行这个function,当自动包装消息在一次拉动后不会消失。

Git正在运行git-repack,它将许多对象(=文件,提交和树)打包到一个包文件中。 有时Git会这样做,当启发式表示可以节省空间时(一个包文件包含压缩对象变化,而objects /目录中的每个文件都包含压缩的完整文件内容)

希望git gc --auto step现在(git 2.0.1,2014年6月25日)效率更高。
见NguyễnTháiNgọcDuy 提交的62aad18 ( pclouds

gc --auto :不要在后台locking引用

9f673f9 (运行gc :config选项 – auto – 后台 – 2014-02-08,Git 2.0.0)在后台放置“ gc --auto ”以减less用户的等待时间。
部分垃圾收集是pack-refs和修剪reflogs。 这些需要locking一些裁判,并可能会中止其他进程试图locking相同的裁判。

如果gc --auto在脚本中间被触发,gc在后台持有锁可能会使脚本失败,这在9f673f9之前是不会发生的。

继续在前台运行pack-refs和“ reflog --prune ”来停止并行ref的更新。 其余的后台操作(repack,prune和rerere)不应该影响正在运行的git进程。