导致git gc --auto的所有命令的列表

时间:2011-02-28 01:42:31

标签: git msysgit git-gc

是否存在导致git gc --auto运行的任何命令的确定列表? git-gc(1) man page只是声明:

  

- 自动

     

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

(强调补充)

我正在组织从SVN到Git的大型迁移。绝大多数用户将使用Windows PC,其中不可忽视的部分是非技术性的。他们将使用TortoiseGit(因为它与他们已经熟悉的TortoiseSVN非常匹配) - 我注意到TortoiseGit不包含任何手动运行git gc的功能。

不能指望非技术人员必须启动“git bash”命令行才能从适当的工作目录运行git gc --auto;当我们使用MsysGit的“便携式”发行版时,他们将不会拥有“Git GUI Here ..”windows shell上下文菜单快捷方式。

期望随着时间的推移,Git会主要自我维护,或者我是否需要尝试使用非技术性的用户友好方法来调用git gc --auto

2 个答案:

答案 0 :(得分:5)

builtin/merge.c:            const char *argv_gc_auto[] = { "gc", "--auto", NULL };
builtin/receive-pack.c:     "gc", "--auto", "--quiet", NULL,
git-am.sh:                  git gc --auto
git-rebase--interactive.sh: git gc --auto &&
git-svn.perl:               command_noisy('gc', '--auto');

来自git.git上的git grep -- --auto,这些结果看起来很有趣。值得注意的是builtin/merge.c,这意味着常见的git pull应触发git gc --auto

此外,除非你的“非技术”工作人员正在做相当'先进'的工作(此时他们不再是'非技术'),我不明白为什么他们需要运行{ {1}}手动而不是让git gc处理所有内容。

答案 1 :(得分:1)

使用Git 2.17(2018年第二季度),您必须将git commit添加到触发git gc --auto的命令列表中。 实际上,自Git开始以来应该是这种情况。

commit 095c741Ævar Arnfjörð Bjarmason (avar)(2018年2月28日) (由Junio C Hamano -- gitster --合并于commit 9bb8eb0,2018年3月8日)

  

commit:在git gc --auto挂钩

之前运行post-commit      

git-commit的行为更改回原来的状态   d4bb43e("调用" git gc --auto"来自commitmergeam和   rebase。",2007-09-05,Git v1.5.4-rc0)当它是git-commit.sh时。

     

不久之后在f5bbc32("端口git commit到C。",2007-11-08,Git v1.5.4-rc0)移植到C时, " git gc --auto"调用消失了。

     

由于这种意外的回归,git gc --auto仅针对git-am运行,   git-mergegit-fetchgit-receive-pack   可以编写一个脚本,以便#34; git commit"

在本地提供大量数据,而gc永远不会运行。

     

一个本地提交生成的区域文件的此类存储库   在添加每日cronjob之前,变化已经增长到大约60GB   至" git gc",将其降至1GB以下。这将是这样的   案件在没有干预的情况下工作。

     

我认为修复存储库增长的病态案例   花费一些时间永远是值得的权衡   毫秒调用" git gc --auto" (在常见的情况下   什么都不做。