使用 Git 2.17(2018 年第二季度),您必须添加git commit
到触发git gc --auto
.
实际上,从 Git 开始就应该如此。
请参阅Ævar Arnfjörð Bjarmason ( ) 的提交 095c741(2018 年 2 月 28 日)。(由Junio C Hamano 合并——在提交 9bb8eb0中,2018 年 3 月 8 日)avar
gitster
commit
:在钩子git gc --auto
之前运行post-commit
将d4bb43e中的行为更改git-commit
回
它
在.git gc --auto
commit
merge
am
rebase
git-commit.sh
不久之后,在f5bbc32(“Port git commit
to 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
.
可以编写一个脚本来“ git commit
”在本地存储大量数据,并且gc
永远不会运行。
在将每日 cronjob 添加到“”之前,一个在本地提交生成的区域文件更改的此类存储库已增长到约 60GB 的大小git gc
,使其降至不到 1GB。这将使此类案例无需干预即可工作。
我认为修复这种存储库将永远增长的病态情况是一个值得的权衡,因为它花费了几毫秒调用“ git gc --auto
”(在它不做任何事情的常见情况下)。
您可以使用 Git 2.27(2020 年第二季度)找到此列表的另一个说明,它教“ am
”、“ commit
”、“ merge
”和“ rebase
”,当它们使用“ --quiet
”选项运行时,将“”传递--quiet
给“ gc --auto
”。
请参阅Junio C Hamano ( ) 的提交 7c3e9e8和提交 850b6ed(2020 年 5 月 6 日)。(由Junio C Hamano 合并 -- --在提交 3af459e中,2020 年 5 月 13 日)gitster
gitster
auto-gc
git fetch
: 从“ ”中提取一个可重用的助手
审核人:Taylor Blau
早在1991006c ( fetch
: convert argv_gc_auto
to struct argv_array
, 2014-08-16, Git v2.1.1 ) 中,我们教过 " git fetch --quiet
" 将 " --quiet
" 选项传递给 " gc --auto
"。
但是,此问题不仅限于“获取”:
$ git grep -e 'gc.*--auto' \*.c
am
在“ ”、“ commit
”、“ merge
”和“ ”中找到命中,并且这些命令在它们自己被告知要安静时rebase
不会传递“ --quiet
”到“ ”。gc --auto
作为准备步骤,让我们引入一个辅助函数run_auto_gc()
,调用者可以传递一个布尔值“ quiet
”,并使用该辅助函数重做“”的修复git fetch
。