Le coût du repack complet
git gc traditionnel exécute git repack -ad, réécrivant tous les objets dans un packfile. Sur un repo de plusieurs gigaoctets, c'est des heures de CPU et IO. Le repacking géométrique (Git 2.32+) l'évite en maintenant une série de packs dont les tailles suivent une progression géométrique.
Comment ça marche
Les tailles de pack forment une séquence où chaque pack est au moins N fois plus grand que le suivant plus petit. Le coût agrégé dans le temps est O(objets totaux × log) au lieu de O(objets totaux) par gc.
Exécution
git repack --geometric=2 -d
git repack --geometric=2 -d --write-midx
git config maintenance.incremental-repack.enabled true
Apparier avec MIDX
git config core.multiPackIndex true
git multi-pack-index write
git multi-pack-index expire
Maintenance en arrière-plan
git maintenance start
git maintenance run --task=incremental-repack
Quand forcer un repack complet
git repack -ad --depth=50 --window=250 --write-midx --write-bitmap-index
Considérations côté serveur
Les serveurs Forge (GitHub, GitLab, Gitea) utilisent le repack géométrique à grande échelle.
Erreurs courantes
Exécuter le repack géométrique sans MIDX. Régler le facteur trop petit (e.g., 1.1) — les packs prolifèrent.
Valeurs courantes
--geometric=2: équilibré.--geometric=4: moins de packs, plus gros.--geometric=1.5: merging plus agressif.