Conocer tu peso
Antes de optimizar, mide. Git incluye git count-objects para estadísticas básicas; git-sizer de terceros de GitHub da un análisis más profundo con umbrales de problema.
git count-objects
git count-objects -v
git count-objects -vH
git count-objects --human-readable
git-sizer
git-sizer
git-sizer --verbose
git-sizer --no-progress --threshold 1
Insights de muestra
- Número máximo de archivos en un tree: advierte por encima de 100k.
- Tamaño máximo de blob: advierte por encima de 50MB.
- Tamaño total de todos los commits: rastrea crecimiento.
- Profundidad máxima de tag.
- Total de objetos alcanzables.
Encontrar archivos grandes
git rev-list --objects --all | \
git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize:disk) %(rest)' | \
awk '$1=="blob" {print $3, $4}' | sort -rn | head
Acciones por hallazgo
- Blobs grandes: migrar a Git LFS o reescribir historia con
filter-repo. - Muchos archivos pequeños: habilitar
feature.manyFiles, sparse checkout. - Muchas refs: habilitar protocolo v2; considerar reftable.
- Recorridos lentos: escribir commit-graph con filtros Bloom.
- Búsquedas lentas: habilitar MIDX con bitmaps.
Errores comunes
Mirar solo el tamaño de .git en disco — los objetos empaquetados comparten bytes vía deltas.
Rastrear crecimiento
git-sizer --json > sizer-$(date +%Y%m%d).json
diff <(jq . sizer-old.json) <(jq . sizer-new.json)