Ein rasend schneller Shell-Einzeiler
Dieses Shell-Skript zeigt alle Blob-Objekte im Repository an, sortiert vom kleinsten zum größten.
Für mein Beispiel-Repos lief es ungefähr so 100 Mal schneller als die anderen, die hier zu finden sind.
Auf meinem bewährten Athlon II X4-System bewältigt er die Linux-Kernel-Repository mit seinen 5,6 Millionen Objekten in etwas mehr als eine Minute .
Das Basisskript
git rev-list --objects --all |
git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' |
sed -n 's/^blob //p' |
sort --numeric-sort --key=2 |
cut -c 1-12,41- |
$(command -v gnumfmt || echo numfmt) --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest
Wenn Sie den obigen Code ausführen, erhalten Sie eine schöne menschenlesbare Ausgabe wie diese:
...
0d99bb931299 530KiB path/to/some-image.jpg
2ba44098e28f 12MiB path/to/hires-image.png
bd1741ddce0d 63MiB path/to/some-video-1080p.mp4
macOS-Benutzer : Seit numfmt
unter macOS nicht verfügbar ist, können Sie entweder die letzte Zeile weglassen und mit rohen Bytegrößen arbeiten oder brew install coreutils
.
Filtern
Zu erreichen weitere Filterung fügen Sie eine der folgenden Zeilen ein vor dem sort
Zeile .
An Dateien ausschließen, die sich in HEAD
fügen Sie die folgende Zeile ein:
grep -vF --file=<(git ls-tree -r HEAD | awk '{print $3}') |
An nur Dateien anzeigen, die eine bestimmte Größe überschreiten (z.B. 1MiB = 2 20 B) wird die folgende Zeile eingefügt
awk '$2 >= 2^20' |
Ausgabe für Computer
Um eine Ausgabe zu erzeugen, die besser für die Weiterverarbeitung geeignet von Computern, lassen Sie die letzten beiden Zeilen des Basisskripts weg. Sie übernehmen die gesamte Formatierung. Das Ergebnis sieht dann etwa so aus:
...
0d99bb93129939b72069df14af0d0dbda7eb6dba 542455 path/to/some-image.jpg
2ba44098e28f8f66bac5e21210c2774085d2319b 12446815 path/to/hires-image.png
bd1741ddce0d07b72ccf69ed281e09bf8a2d0b2f 65183843 path/to/some-video-1080p.mp4
Anhang
Entfernen von Dateien
Die eigentliche Entfernung der Datei finden Sie unter diese SO-Frage zum Thema .
Verstehen der Bedeutung der angezeigten Dateigröße
Dieses Skript zeigt die Größe jeder Datei im Arbeitsverzeichnis an. Wenn Sie sehen wollen, wie viel Platz eine Datei einnimmt, wenn sie nicht ausgecheckt ist, können Sie %(objectsize:disk)
代わりに %(objectsize)
. Es ist jedoch zu beachten, dass auch diese Metrik ihre Tücken hat, wie im Abschnitt Dokumentation .
Anspruchsvollere Größenstatistiken
Manchmal reicht eine Liste großer Dateien einfach nicht aus, um herauszufinden, was das Problem ist. Verzeichnisse oder Verzweigungen, die eine große Anzahl kleiner Dateien enthalten, würden Sie zum Beispiel nicht entdecken.
Wenn das Skript hier also nicht ausreicht (und Sie eine aktuelle Version von git haben), sollten Sie sich git-filter-repo --analyze
o git rev-list --disk-usage
( Beispiele ).