Sein Gewicht kennen
Vor der Optimierung messen. Git liefert git count-objects fur Basisstatistiken; das Drittanbieter-git-sizer von GitHub liefert eine tiefere Analyse.
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
Beispieleinblicke
- Maximale Anzahl Dateien in einem Tree: warnt uber 100k.
- Maximale Blob-Grosse: warnt uber 50MB.
- Gesamtgrosse aller Commits.
- Maximale Tag-Tiefe.
- Gesamt erreichbare Objekte.
Grosse Dateien finden
git rev-list --objects --all | \
git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize:disk) %(rest)' | \
awk '$1=="blob" {print $3, $4}' | sort -rn | head
Aktionen pro Befund
- Grosse Blobs: zu Git LFS migrieren oder Historie mit
filter-repoumschreiben. - Viele kleine Dateien:
feature.manyFiles, sparse checkout aktivieren. - Viele Refs: protocol v2 aktivieren; reftable erwagen.
- Langsame Walks: commit-graph mit Bloom-Filtern schreiben.
- Langsame Lookups: MIDX mit Bitmaps aktivieren.
Haufige Fehler
Nur die Grosse von .git auf der Disk anschauen — gepackte Objekte teilen Bytes via Deltas.
Wachstum verfolgen
git-sizer --json > sizer-$(date +%Y%m%d).json
diff <(jq . sizer-old.json) <(jq . sizer-new.json)