我有相当积极的自动GC尝试在Git中,主要用于包装用途。 在我的回购协议,如果我做git config --list
我已经安装
...
gc.auto=250
gc.autopacklimit=30
...
如果我做git count-objects -v
我得到
count: 376
size: 1251
in-pack: 2776
packs: 1
size-pack: 2697
prune-packable: 0
garbage: 0
但是git gc --auto
不改变这些数字,没有什么是被包装! 不应松动物体得到挤满因为我是126级的对象在gc.auto限制?
其中一个要点gc --auto
是,它应该是非常快的,所以其他命令可以经常称之为“以防万一”。 为了实现这个目标,对象计数只是猜测。 由于git help config
下称gc.auto
:
当有超过这么多松散物大约多在库[...]
看代码( too_many_loose_objects()
中buildin/gc.c
),这里是发生了什么:
- 该gc.auto由256分和围捕
- 包含有开头的所有对象的文件夹
17
被打开 - 如果文件夹包含比第1步的结果,更多的对象检查
这工作得很好,因为SHA-1是均匀分布的,所以“与X开头的所有对象”是整套的代表。 但是,当然,这仅适用于对象的一个大大的量。 懒做数学,我猜至少> 3000。 随着6700(默认值gc.auto
),这应该已经工作得非常可靠。
对我来说,核心问题就是为什么你需要这么低的设置,是否是很重要的,这确实运行在250级的对象。 随着250的设置, gc
会只要你有这样开始的2名宽松的对象上运行17
。 出现这种情况的机会是> 80%
600个目的和> 90%
为800级的对象。
更新:无法帮助它-不得不做数学:)。 我想知道的是评估系统将如何工作。 下面是结果的曲线图。 对于任何给定gc.auto
,有多高的概率gc
时,有将开始gc.auto
(红色)/ gc.auto * 1.1
(绿色)/ gc.auto * 1.2
(橙色)/ gc.auto * 1.5
(蓝色)/ gc.auto * 2
在回购(紫色)松散物?
需要注意的是gc auto
是在Git的2.12.2更稳健(2017年3月发布的前两天)。
见提交a831c06 (2017年2月10日),由大卫·特纳( csusbdt
) 。
帮助-由: 杰夫·金( peff
) 。
(通过合并JUNIOÇ滨野- gitster
-在提交d30ec1b 3月21日2017)
gc
:忽略老gc.log
文件
一台服务器可以在有大量未引用的散装物品(比如说,因为很多用户在做一堆垫底的,推动它们的底垫分支机构)的状态结束。
运行“ git gc --auto
在这种状态下”将导致gc.log
要创建的文件,防止未来的汽车GCS,导致包文件堆积。
由于许多git的操作是O(n)
在包文件的数量,这将导致性能不佳。
Git的不应该让自己进入它拒绝做任何维修,因为在某些时候某些片的保养没有取得进展,只是一种状态。
教的Git忽略gc.log
这比(默认)一日龄,可通过进行调整旧文件gc.logExpiry
配置变量 。
这样一来,这些包文件将得到清理,如果必要的话,每天至少一次。 和谁找到需要更频繁的GCS运营商可以调整gc.logExpiry
,以满足他们的需求。
注:由于Git的2.17(Q2 2018), git gc --auto
将在每次运行git commit
了。
请参阅“ 引起的所有命令的列表git gc --auto
”。
而且还有一个pre-gc --auto
关联到该命令也钩 。