我有一个反复出现的问题,我的git repo(我认为?)将决定它需要垃圾收集。这个过程需要半个多小时,然后在每次拉/推操作时触发。
手动运行Git GC需要半小时,但似乎无法解决问题。我找到的唯一解决方案是删除我的仓库并克隆新鲜,由于各种原因这是次优的。
我的git GC操作可能会很慢,因为我已经设置了git一些内存限制来阻止它在git GC操作上崩溃,就像它在达到4gb windows内存限制时那样做,然后瘫痪。
任何帮助将不胜感激。它是一个大型仓库,repo确实包含大量二进制数据,以及大量非常大的(> 500k)文本文件。
所以, 1.我如何限制Git决定垃圾收集的金额。 2.如何加快GC操作? 3.我能做些什么来解决或最大限度地减少所涉及的更大问题(也就是说,为什么它首先要进行垃圾收集)?
答案 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 781262c见Adam 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
说话。