Il costo del repack completo
git gc tradizionale esegue git repack -ad, riscrivendo tutti gli oggetti in un solo packfile. Su repo multi-gigabyte, sono ore di CPU e IO. Il repack geometrico (Git 2.32+) lo evita mantenendo una serie di pack le cui dimensioni seguono una progressione geometrica.
Come funziona
Le dimensioni dei pack formano una sequenza dove ogni pack e almeno N volte piu grande del successivo piu piccolo.
Esecuzione
git repack --geometric=2 -d
git repack --geometric=2 -d --write-midx
git config maintenance.incremental-repack.enabled true
Abbinamento con MIDX
git config core.multiPackIndex true
git multi-pack-index write
git multi-pack-index expire
Manutenzione in background
git maintenance start
git maintenance run --task=incremental-repack
Quando forzare un repack completo
git repack -ad --depth=50 --window=250 --write-midx --write-bitmap-index
Considerazioni server-side
I forge server (GitHub, GitLab, Gitea) usano il repack geometrico su scala.
Errori comuni
Eseguire repack geometrico senza MIDX — le performance regrediscono.
Valori comuni
- Default
--geometric=2: bilanciato. --geometric=4: meno pack piu grandi.--geometric=1.5: merge piu aggressivo.