snippets · bash

Welche Datei bläht mein Git-Repository auf?

Das Repository ist plötzlich riesig oder der Clone dauert auffällig lange. Im aktuellen Projektbaum findest du aber keine entsprechend große Datei.

Das Problem

du und find betrachten vor allem den aktuellen Dateibaum. Git speichert jedoch Objekte aus älteren Commits weiter. Ein längst gelöschtes ZIP, SQL-Dump oder Video kann deshalb weiterhin den größten Teil von .git ausmachen.

Analyse

Zuerst messen wir die Git-Daten selbst:

du -sh .git

Ist .git groß, interessieren die größten Blobs der erreichbaren Historie:

git rev-list --objects --all \
  | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \
  | awk '$1=="blob"' \
  | sort -k3nr \
  | head -20

git rev-list --objects --all liefert die Objekte samt bekannten Pfaden. git cat-file --batch-check ergänzt Typ und Größe. Danach bleiben nur Blobs übrig und die größten landen oben.

Ergebnis lesen

Siehst du dort eine Datei mit hundert Megabyte, obwohl sie im Working Tree längst fehlt, hast du die Ursache gefunden: Git-Historie, nicht aktueller Dateibaum.

Wichtig

Damit ist noch nichts entfernt. History-Rewrite mit git filter-repo oder ähnlichen Werkzeugen verändert Commit-IDs und betrifft alle Klone. Das ist ein eigener, bewusster Schritt.

Quelle: https://git-scm.com/docs/git-cat-file