Git神秘地运行垃圾收集"不时"并删除和孤立的提交。
https://www.kernel.org/pub/software/scm/git/docs/git-gc.html
科学地说,这将在您意识到确实需要提交之前大约6-8小时发生。。
我宁愿不让Git删除我的文件。如何完全禁用自动垃圾收集?
答案 0 :(得分:25)
来自very same page you just linked to:
某些git命令可能会自动运行git gc;有关详细信息,请参阅下面的--auto标志。如果您知道自己在做什么,并且您想要的是永久禁用此行为而无需进一步考虑,请执行以下操作:
$ git config --global gc.auto 0
答案 1 :(得分:6)
另一种方法,最近记载在:
文档/配置:提及" now
"和" never
"为了'到期'#39;设置
除了近似风格的值("
2.months.ago
","yesterday
"), 'gc.*expire*
'的消费者配置变量也接受和 尊重'now
' ("立即执行")和'never
' ("完全压制")。
commit 8cc8816见Eric Sunshine (sunshineco
)(2015年7月28日)
建议:Michael Haggerty (mhagger
)。
(由Junio C Hamano -- gitster
--合并于commit 8cc8816,2015年7月28日)
这意味着这也会阻止任何gc:
git config --global gc.pruneExpire never
git config --global gc.reflogExpire never
但是,您可能会遇到(如果使用配置值never
):
warning: There are too many unreachable loose objects; run 'git prune' to remove them.
在这种情况下,您可能希望将gc.auto
设置为某个较高的值(例如100000
),如果您真的不想过期的话。这将使警告静音但可能导致垃圾收集总体上不那么有效,因此这应该被视为一种解决方法,而不是真正的解决方案。有关其他详细信息,请参阅Is it possible to get `git gc` to pack reflog objects?。
答案 2 :(得分:1)
我找到了这个答案,因为我试图阻止git在后台运行git gc
,因为它与我试图在回购中执行的其他操作搞混了。事实证明,您可以使用以下方式专门禁用背景行为:
$ git config gc.autodetach false