JefromiがDan の回答にコメントしたように、ベア リポジトリの「通常の」使用中に自動的に呼び出されるgit gc
必要があります。
git gc --aggressive
アクティブに使用されている 2 つの裸の共有リポジトリで実行しました。1 つは過去 3 ~ 4 週間で約 38 件のコミットがあり、もう 1 つは約 3 か月で約 488 件のコミットがあります。git gc
どちらのリポジトリでも手動で実行した人はいません。
より小さなリポジトリ
$ git count-objects
333 objects, 595 kilobytes
$ git count-objects -v
count: 333
size: 595
in-pack: 0
packs: 0
size-pack: 0
prune-packable: 0
garbage: 0
$ git gc --aggressive
Counting objects: 325, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (323/323), done.
Writing objects: 100% (325/325), done.
Total 325 (delta 209), reused 0 (delta 0)
Removing duplicate objects: 100% (256/256), done.
$ git count-objects -v
count: 8
size: 6
in-pack: 325
packs: 1
size-pack: 324
prune-packable: 0
garbage: 0
$ git count-objects
8 objects, 6 kilobytes
より大きなリポジトリ
$ git count-objects
4315 objects, 11483 kilobytes
$ git count-objects -v
count: 4315
size: 11483
in-pack: 9778
packs: 20
size-pack: 15726
prune-packable: 1395
garbage: 0
$ git gc --aggressive
Counting objects: 8548, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (8468/8468), done.
Writing objects: 100% (8548/8548), done.
Total 8548 (delta 7007), reused 0 (delta 0)
Removing duplicate objects: 100% (256/256), done.
$ git count-objects -v
count: 0
size: 0
in-pack: 8548
packs: 1
size-pack: 8937
prune-packable: 0
garbage: 0
$ git count-objects
0 objects, 0 kilobytes
gc
これら 2 つのリポジトリを編集する前に考えておけばよかったのですが、違いを確認するオプションgit gc
なしで実行する必要がありました。--aggressive
幸いなことに、テストする中規模のアクティブなリポジトリが残っています (2 か月近くで 164 件のコミット)。
$ git count-objects -v
count: 1279
size: 1574
in-pack: 2078
packs: 6
size-pack: 2080
prune-packable: 607
garbage: 0
$ git gc
Counting objects: 1772, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (1073/1073), done.
Writing objects: 100% (1772/1772), done.
Total 1772 (delta 1210), reused 1050 (delta 669)
Removing duplicate objects: 100% (256/256), done.
$ git count-objects -v
count: 0
size: 0
in-pack: 1772
packs: 1
size-pack: 1092
prune-packable: 0
garbage: 0
$ git gc --aggressive
Counting objects: 1772, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (1742/1742), done.
Writing objects: 100% (1772/1772), done.
Total 1772 (delta 1249), reused 0 (delta 0)
$ git count-objects -v
count: 0
size: 0
in-pack: 1772
packs: 1
size-pack: 1058
prune-packable: 0
garbage: 0
このリポジトリを定期的に行き来しているにもかかわらず、ランニングはgit gc
明らかに に大きなへこみを作りました. しかし、 のマンページを読んだときに、デフォルトのルース オブジェクトの制限が 6700 であることに気付きました。これにはまだ達していないようです。count-objects
push
fetch
git config
したがって、結論はnoのようです。裸のリポジトリで手動で実行する必要はありません。*ただし、 のデフォルト設定では、ガベージ コレクションが自動的に行われるまでに長い時間がかかる場合があります。git gc
gc.auto
* 通常、実行する必要はありませんgit gc
。ただし、スペースが不足git gc
している場合は、手動で実行するかgc.auto
、より低い値に設定する必要があります。ただし、質問に対する私のケースは単純な好奇心でした。