01/23456789abcdef0123456789abcdef01234567
Gitは、ルース オブジェクトの数が魔法の定数 (デフォルトでは 6700 ですが、構成可能です) を超えると、 「ルース オブジェクト」( のような名前のファイル内) から「パック」に切り替わりますgc.auto
。SHA-1 値は適切に分散される傾向があるため、単一のディレクトリを調べることで、ルーズ オブジェクトの合計を概算できます。オブジェクト ディレクトリの 1 つに (6700 + 255) / 256 = 27 個を超えるファイルがある場合は、パック ファイルの時間です。
したがって、追加のファンアウト ( 01/23/4567...
) は必要ありません。1 つのディレクトリにそれほど多くのオブジェクトを取得することはまずありません。実際、(27 + 255) / 256 は 1 であるため、(6700 よりも) 高いしきい値を設定しない限り、ファンアウトが大きくなると、自動パッキングの時期を検出するのが難しくなる傾向があります。01/*/
だけではなく、すべてをカウントしたいでしょう01/
。
0/1234567...
ディレクトリごとに最大 419 個のオブジェクトを使用して許可することで、同じ動作を得ることができますが、リニア ディレクトリ スキャン (まだそれらを使用しているシステム上) は O(n 2 ) であり、27 2は単なる 729 ですが、419 2は175561. [編集: これはファイルの作成にのみ適用されます。2 段階の検索が行われます。1 回目は作成しても問題ないことを確認し、2 回目はスロットまたは追加を検索します。ルックアップはまだ O(n) です。]