Presupuestos de repack
Cuando Git computa deltas durante repack, considera una ventana de objetos base candidatos por target. Ventanas más grandes producen packs más pequeños pero usan más memoria y CPU. El ajuste es esencial para repos enormes y runners de build con restricciones por igual.
Perillas clave
[pack]
windowMemory = 256m
threads = 0
deltaCacheSize = 256m
deltaCacheLimit = 1000
window = 10
depth = 50
sizeLimit = 2g
bigFileThreshold = 512m
Repack con presupuestos personalizados
git repack -adf --window=250 --depth=50 \
--window-memory=512m --threads=8 \
--write-midx --write-bitmap-index
Matemáticas de memoria
La memoria total es aproximadamente pack.threads × pack.windowMemory + pack.deltaCacheSize.
git -c pack.threads=2 -c pack.windowMemory=128m repack -adf
Ajuste del servidor
[uploadpack]
packObjectsHook = /usr/local/bin/pack-objects-wrapper
[pack]
threads = 4
windowMemory = 128m
Umbral de archivos grandes
git config core.bigFileThreshold 50m
Errores comunes
Establecer --window=2000 esperando packs más apretados sin probar memoria — sigue OOM.
Medir efecto
du -sh .git/objects/pack/
git verify-pack -v .git/objects/pack/pack-*.idx | tail -3
GIT_TRACE2_PERF=1 git repack -adf 2>&1 | tail -20