use*_*840 17 git garbage-collection
我正在Git中试验相当激进的auto gc,主要用于打包.在我的回购中,如果我这样做,git config --list我已经设置好了
...
gc.auto=250
gc.autopacklimit=30
...
Run Code Online (Sandbox Code Playgroud)
如果git count-objects -v我得到了
count: 376
size: 1251
in-pack: 2776
packs: 1
size-pack: 2697
prune-packable: 0
garbage: 0
Run Code Online (Sandbox Code Playgroud)
但是git gc --auto没有改变这些数字,没有任何东西被打包!不应该松散的物体被包装,因为我是超过gc.auto限制的126个物体?
Chr*_*ial 43
其中一个要点gc --auto是它应该非常快,所以其他命令可以经常称它为"以防万一".为此,仅猜测对象计数.至于git help config说下gc.auto:
当存储库中有大约这么多松散的对象时[...]
查看代码(too_many_loose_objects()inbuildin/gc.c),这是发生的事情:
17被打开这样可以正常工作,因为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(紫色)松散物体时,将开始的概率有多高?
