是否存在导致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
?
答案 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
"来自commit
,merge
,am
和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-merge
,git-fetch
和git-receive-pack
可以编写一个脚本,以便#34;git commit
"gc
永远不会运行。一个本地提交生成的区域文件的此类存储库 在添加每日cronjob之前,变化已经增长到大约60GB 至"
git gc
",将其降至1GB以下。这将是这样的 案件在没有干预的情况下工作。我认为修复存储库增长的病态案例 花费一些时间永远是值得的权衡 毫秒调用"
git gc --auto
" (在常见的情况下 什么都不做。