Git:Git什么时候进行垃圾收集?

Waz*_*ery 6 git version-control garbage-collection git-gc

我想知道:Git什么时候进行垃圾收集?我知道在过去必须调用git gc手动启动垃圾收集,但现在它是自动完成的,何时?

另外,是否需要在最新的Git版本中手动调用它?

tor*_*rek 15

大部分答案都在git gc文档中:

--auto

使用此选项,git gc检查是否需要任何内务处理; 如果没有,它退出而不执行任何工作.git gc --auto执行可能会创建许多松散对象的操作后,会运行一些git命令.

如果存储库中有太多松散的对象或太多的包,则需要内务处理.如果松散对象的数量超过gc.auto配置变量的值,则使用将所有松散对象组合成单个包git repack -d -l.将值设置gc.auto为0将禁用松散对象的自动打包.

如果包的数量超过了值gc.autopacklimit,则.keep使用-A选项of 将现有包(标记为文件的包)合并到单个包中git repack.设置gc.autopacklimit为0将禁用包的自动合并.

这里唯一缺少的是解释哪些"某些"命令可能会运行git gc --auto,以及何时运行.这个列表可能会有变化,但是看一下当前的git源代码,这些代码突出:

git fetch
git merge
git receive-pack
git am
git rebase
Run Code Online (Sandbox Code Playgroud)

(这是来自git grep -e --auto -- '*.c' '*.sh'和眼球 - 排除所有t/测试脚本和其他明显的错误命中).如果你想要更深入的东西,git的源代码就是github.com......

注意:使用Git 2.17(2018年第二季度),您还需要考虑:

git commit
Run Code Online (Sandbox Code Playgroud)