Conoscere il proprio peso
Prima di ottimizzare, misurare. Git fornisce git count-objects per le statistiche base; il git-sizer di terze parti di GitHub fornisce un'analisi piu profonda.
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
Esempi di insight
- Numero massimo di file in un tree: avverte sopra 100k.
- Dimensione massima di blob: avverte sopra 50MB.
- Dimensione totale di tutti i commit.
- Profondita massima dei tag.
- Oggetti raggiungibili totali.
Trovare file grandi
git rev-list --objects --all | \
git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize:disk) %(rest)' | \
awk '$1=="blob" {print $3, $4}' | sort -rn | head
Azioni per scoperta
- Blob grandi: migrare a Git LFS o riscrivere con
filter-repo. - Molti file piccoli: abilitare
feature.manyFiles, sparse checkout. - Molti ref: abilitare protocollo v2; considerare reftable.
- Walk lenti: scrivere commit-graph con Bloom filter.
- Lookup lenti: abilitare MIDX con bitmap.
Errori comuni
Guardare solo la dimensione di .git su disco — gli oggetti packed condividono byte via delta.
Tracciare la crescita
git-sizer --json > sizer-$(date +%Y%m%d).json
diff <(jq . sizer-old.json) <(jq . sizer-new.json)