Por Anónimo (no verificado) , 29 Abril 2026

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.