gpt4 book ai didi

git - 理解 git gc --auto

转载 作者:IT王子 更新时间:2023-10-29 01:28:08 28 4
gpt4 key购买 nike

我正在 Git 中尝试使用相当激进的自动 gc,主要用于打包目的。在我的 repo 协议(protocol)中,如果我执行 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 并没有改变这些数字,没有任何东西被打包!由于我超过 gc.auto 限制的 126 个对象,松散的对象不应该打包吗?

最佳答案

gc --auto 的 Gist 之一是它应该非常快,因此其他命令经常称它为“以防万一”。为此,只能猜测对象计数。正如 git help configgc.auto 下所说:

When there are approximately more than this many loose objects in the repository […]

查看代码 ( too_many_loose_objects() in buildin/gc.c ),会发生以下情况:

  1. gc.auto 除以 256 取整
  2. 打开包含所有以17开头的对象的文件夹
  3. 检查文件夹包含的对象是否多于步骤 1 的结果

这很好用,因为 SHA-1 是均匀分布的,所以“所有以 X 开头的对象”代表整个集合。但是当然这只适用于大量的对象。懒得算,我猜至少> 3000。使用 6700(gc.auto 的默认值),这应该已经非常可靠地工作了。

对我来说,核心问题是为什么您需要这么低的设置,以及它真的以 250 个对象运行是否重要。如果设置为 250,gc 将在您有 2 个以 17 开头的松散对象时立即运行。对于 600 个对象,发生这种情况的可能性是 > 80%,对于 800 个对象,发生这种情况的可能性是 > 90%

更新:没办法——不得不算一下 :)。我想知道该估算系统的效果如何。这是结果图。对于任何给定的 gc.auto,当存在 gc.auto(红色)/ 时,gc 启动的概率有多大gc.auto * 1.1(绿色)/gc.auto * 1.2(橙色)/gc.auto * 1.5(蓝色)/gc. auto * 2 (紫色) repo 中的松散对象?

Plot of the results

关于git - 理解 git gc --auto,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16337498/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com