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

时间:2015-01-30 23:18:04

标签: git version-control garbage-collection git-gc

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

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

1 个答案:

答案 0 :(得分:13)

大部分答案都在git gc documentation

  

--auto

     

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

     

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

     

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

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

git fetch
git merge
git receive-pack
git am
git rebase

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

注意:with Git 2.17 (Q2 2018),您还需要考虑:

git commit