4

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

手动运行 Git GC 需要半小时,但似乎无法解决问题。我发现的唯一解决方案是删除我的 repo 并重新克隆,由于许多原因,这是次优的。

我的 git GC 操作可能很慢,因为我设置了 git 一些内存限制以阻止它在 git GC 操作中崩溃,就像它曾经在达到 4gb Windows 内存限制然后崩溃时那样。

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

那么,1. 我如何限制 Git 决定进行垃圾收集的数量。2.如何加快GC运行速度?3. 我能做些什么来解决或最小化所涉及的更大问题(也就是为什么它必须首先进行垃圾收集)?

4

2 回答 2

2

唯一真正的解决方法是减小存储库的大小。您可以使用 禁用自动垃圾收集git config --global gc.auto 0,但这会增加推拉时的网络流量(如果它们仍然可以正常工作),并且会增加用于 git 的本地磁盘空间。如果没有git gc,您的本地存储库将包含您更改的每个文件的每个修订的完整副本。git gc但是,如果您在离开时每晚都进行跑步之类的事情,这可能是可行的。

我建议研究类似git Annex 之类的东西,它是为像你这样的情况而设计的。它基本上在您的存储库中存储指向大文件的指针,而不是文件本身。

于 2012-12-17T19:07:15.960 回答
0

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

git gc --auto您可以在“理解git gc --auto”中阅读更多信息。

使用电池时跳过的示例auto-gc挂钩 (in )已更新为几乎总是允许运行,除非命令绝对确定我们使用电池电源(之前,它跳过,除非命令确定我们使用交流电源)。contrib/auto-gcauto-gcon_ac_power

请参阅Adam Borowski ( ) 的提交 781262c(2018 年 2 月 28 日(由Junio C Hamano 合并 -- --提交 b423234中,2018 年 3 月 14 日)kilobyte
gitster

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

台式机和服务器往往没有功率传感器,因此on_ac_power返回 255(“未知”)。因此,让我们将除 1 (" battery") 以外的任何答案作为 run 的禁忌症gc

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

因此,根据您的情况,设置该钩子可以帮助您对是否git gc --auto应该执行有发言权。

于 2018-03-16T23:28:32.577 回答