如何修复这些Git GC问题?

时间:2012-12-17 15:15:58

标签: git git-gc

我有一个反复出现的问题,我的git repo(我认为?)将决定它需要垃圾收集。这个过程需要半个多小时,然后在每次拉/推操作时触发。

手动运行Git GC需要半小时,但似乎无法解决问题。我找到的唯一解决方案是删除我的仓库并克隆新鲜,由于各种原因这是次优的。

我的git GC操作可能会很慢,因为我已经设置了git一些内存限制来阻止它在git GC操作上崩溃,就像它在达到4gb windows内存限制时那样做,然后瘫痪。

任何帮助将不胜感激。它是一个大型仓库,repo确实包含大量二进制数据,以及大量非常大的(> 500k)文本文件。

所以, 1.我如何限制Git决定垃圾收集的金额。 2.如何加快GC操作? 3.我能做些什么来解决或最大限度地减少所涉及的更大问题(也就是说,为什么它首先要进行垃圾收集)?

2 个答案:

答案 0 :(得分:2)

唯一真正的方法是减少存储库的大小。您可以使用git config --global gc.auto 0禁用自动垃圾回收,但这会增加推送和拉取时的网络流量,如果它们仍然可以工作,并且会增加用于git的本地磁盘空间。如果没有git gc,您的本地仓库将包含您更改的每个文件的每个修订版的完整副本。但是,如果您在离开时每晚运行git gc,这可能是可行的。

我建议您查看git annex之类的内容,这是专为像您这样的情况而设计的。它基本上存储了一个指向repo中大文件的指针,而不是文件本身。

答案 1 :(得分:0)

注意:Git 2.17(2018年第二季度)的提交确实指出了git gc --auto将调用的钩子的存在,这有助于最小化该命令的影响。

您可以在“Understanding git gc --auto”中详细了解git gc --auto

示例auto-gc挂钩(在contrib/中),以便在启用时跳过auto-gc 电池已更新为几乎总是允许运行auto-gc,除非on_ac_power命令绝对确定我们已开启 电池电量(早些时候,它会跳过,除非命令确定 我们在交流电源上。)

commit 781262cAdam Borowski (kilobyte)(2018年2月28日) (由Junio C Hamano -- gitster --合并于commit b423234,2018年3月14日)

  

hooks/pre-auto-gc-battery:允许gc在非笔记本电脑上运行

     

桌面和服务器往往没有功率传感器,因此on_ac_power会返回   255(“未知”)。因此,让我们采取除1之外的任何答案(“battery”)   没有禁忌运行gc

     

如果该工具返回“unknown”,则查询其他来源没有意义   因为它已经查询过它们,并且比我们更聪明(可以处理多个   适配器)。

因此,根据您的情况,设置该挂钩可以帮助您对执行或不执行git gc --auto说话。