Connaître son poids
Avant d'optimiser, mesurez. Git fournit git count-objects pour stats basiques ; le tiers git-sizer de GitHub donne une analyse plus profonde avec seuils d'alerte.
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
Aperçus exemple
- Nombre max de fichiers dans un tree : alerte au-dessus de 100k.
- Taille max de blob : alerte au-dessus de 50MB.
- Taille totale de tous les commits.
- Profondeur max de tag.
- Total des objets atteignables.
Trouver les gros fichiers
git rev-list --objects --all | \
git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize:disk) %(rest)' | \
awk '$1=="blob" {print $3, $4}' | sort -rn | head
Actions par découverte
- Gros blobs : migrer vers Git LFS ou réécrire historique.
- Beaucoup de petits fichiers : activer
feature.manyFiles, sparse checkout. - Beaucoup de refs : activer protocole v2 ; considérer reftable.
- Parcours lents : écrire commit-graph avec filtres Bloom.
- Recherches lentes : activer MIDX avec bitmaps.
Erreurs courantes
Regarder seulement la taille de .git sur disque — les objets empaquetés partagent les bytes via deltas.
Suivre la croissance
git-sizer --json > sizer-$(date +%Y%m%d).json
diff <(jq . sizer-old.json) <(jq . sizer-new.json)