如何防止GIT中的垃圾收集?

时间:2015-01-22 15:26:16

标签: git garbage-collection

Git神秘地运行垃圾收集"不时"并删除和孤立的提交。

https://www.kernel.org/pub/software/scm/git/docs/git-gc.html

科学地说,这将在您意识到确实需要提交之前大约6-8小时发生。。

我宁愿不让Git删除我的文件。如何完全禁用自动垃圾收集?

3 个答案:

答案 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 8cc8816Eric 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