El costo del repack completo
git gc tradicional ejecuta git repack -ad, reescribiendo todos los objetos en un packfile. En un repo de varios gigabytes, son horas de CPU e IO. El repacking geométrico (Git 2.32+) lo evita manteniendo una serie de packs cuyos tamaños siguen una progresión geométrica — solo los más pequeños se mergean cada ciclo.
Cómo funciona
Los tamaños de pack forman una secuencia donde cada pack es al menos N veces más grande que el siguiente más pequeño. El costo agregado a lo largo del tiempo es O(objetos totales × log) en lugar de O(objetos totales) por gc.
Ejecución
git repack --geometric=2 -d
git repack --geometric=2 -d --write-midx
git config maintenance.incremental-repack.enabled true
Emparejar con MIDX
git config core.multiPackIndex true
git multi-pack-index write
git multi-pack-index expire
Mantenimiento en background
git maintenance start
git maintenance run --task=incremental-repack
Cuándo forzar repack completo
git repack -ad --depth=50 --window=250 --write-midx --write-bitmap-index
Consideraciones del servidor
Los servidores Forge (GitHub, GitLab, Gitea) usan repack geométrico a escala. Gitea 1.20+ lo habilita por defecto.
Errores comunes
Ejecutar repack geométrico sin MIDX. Establecer el factor demasiado pequeño (e.g., 1.1) — los packs proliferan.
Valores comunes
--geometric=2: balanceado.--geometric=4: menos packs, más grandes.--geometric=1.5: merging más agresivo.