Fundamentos de packfile
Un packfile agrupa muchos objetos en un archivo con compresión delta — en lugar de almacenar cada versión de un archivo completa, los objetos similares comparten una base y solo guardan la diferencia. El resultado es una reducción de tamaño 5x a 50x en repos reales.
Inspeccionar packs
git verify-pack -v .git/objects/pack/pack-*.idx | head
git count-objects -v
git cat-file --batch-all-objects --batch-check='%(objectname) %(objecttype) %(objectsize:disk)'
Repacking
git repack -ad
git repack -adf --depth=50 --window=250
git repack --geometric=2 -d
Repacking geométrico
El repacking geométrico (Git 2.32+) mantiene una serie de tamaños de pack en una proporción 1:N, evitando el costo de repackear todo cada vez.
Multi-pack-index
Con muchos packs, las búsquedas se ralentizan. El archivo MIDX (Git 2.20+) proporciona un índice unificado a través de los packs:
git multi-pack-index write
git multi-pack-index verify
Ajuste de delta
[pack]
windowMemory = 256m
threads = 0
deltaCacheSize = 256m
Bitmaps de alcanzabilidad
git repack -adb
Errores comunes
Eliminar manualmente archivos de pack — Git los rastrea en metadatos; usa git repack. Establecer pack.window muy alto sin pack.windowMemory puede agotar la memoria.