Как прокомментировал Джефроми Ответ Дэна , git gc
должен вызываться автоматически при "нормальном" использовании чистого хранилища.
Я только что запустил git gc --aggressive
в двух открытых общих репозиториях, которые активно использовались;один с примерно 38 коммитами за последние 3-4 недели, а другой с примерно 488 коммитами за примерно 3 месяца.Никто не запускал 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
редактировали эти два репозитория, но я должен был запустить git gc
без опции --aggressive
, чтобы увидеть разницу.К счастью, у меня осталось активное хранилище среднего размера (164 коммитов за почти 2 месяца).
$ 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
явно сделал большую вмятину в count-objects
, хотя мы регулярно push
до и fetch
из этого хранилища.Но после прочтения справочной страницы для git config
я заметил, что предел свободного объекта по умолчанию - 6700, которого мы, по-видимому, еще не достигли.
Таким образом, похоже, что вывод нет , вам не нужно для ручного запуска git gc
на голом репо; *, но с настройкой по умолчанию для gc.auto
, это может быть долговремя до автоматического сбора мусора.
* Обычно , вам не нужно запускать git gc
.Но иногда вы можете быть привязаны к пробелу , и вам следует запустить git gc
вручную или установить для gc.auto
более низкое значение.Тем не менее, мой вопрос был просто любопытством.