Finden Sie die Größe des Git-Repositorys

283

Wie kann ich auf einfache Weise die Größe meines Git-Repositorys ermitteln?

Und ich meine nicht du -him Stammverzeichnis meines Repositorys. Ich habe viele ignorierte Dateien, sodass sich diese Größe von meiner gesamten Repository-Größe unterscheidet. Ich möchte im Wesentlichen wissen, wie viele Daten beim Klonen meines Repositorys übertragen werden.

mschallert
quelle

Antworten:

260

UPDATE git 1.8.3 führte eine effizientere Methode ein, um eine grobe Größe zu erhalten: git count-objects -vH(siehe Antwort von @VonC)

Für verschiedene Ideen von "vollständiger Größe" können Sie verwenden:

git bundle create tmp.bundle --all
du -sh tmp.bundle

Schließen (aber nicht genau :)

git gc
du -sh .git/

Mit letzterem würden Sie auch zählen:

  • Haken
  • config (Fernbedienungen, Push-Zweige, Einstellungen (Leerzeichen, Zusammenführen, Aliase, Benutzerdetails usw.)
  • Stashes (siehe Kann ich einen Stash von einem Remote-Repo in eine lokale Filiale holen? )
  • Rerere-Cache (der beträchtlich werden kann)
  • Reflogs
  • Backups (zB vom Filterzweig) und verschiedene andere Dinge (Zwischenzustand von Rebase, Halbierung usw.)
sehe sehen
quelle
Vielen Dank! Das erste Verhalten spiegelte die Gesamtgröße des Klons genauer wider, das zweite war jedoch auch ziemlich nahe.
mschallert
7
Hinweis: Diese Antwort ist veraltet. Siehe VonCs Antwort stattdessen für Git-Versionen> = 1.8.3.
John Dibling
Beachten Sie auch, dass meine Antwort eine vollständigere Methode ist, die ihren eigenen Wert haben könnte.
sehe
Können Sie bitte hinzufügen, was git bundleund was git gctatsächlich tut? Wird es ein weiteres (unerwünschtes) Archiv erstellen und dann die Größe messen?
Ramesh Pareek
1
@RameshPareek ja. Dies ist ziemlich klar, da ich dudamit die Größe dieser Datei messe.
sehe
252

Beachten Sie, dass seit Git 1.8.3 (22. April 2013) :

Option " git count-objects" gelernt " --human-readable" aka " -H" zum Anzeigen verschiedener großer Zahlen in Ki/ Mi/ GiBskaliert nach Bedarf.

Dies könnte mit der -vvon Jack Morrison in seiner Antwort erwähnten Option kombiniert werden .

git gc
git count-objects -vH

( git gcWichtig ist, wie erwähnt ABB ‚s Antwort )

Plus (immer noch Git 1.8.3), die Ausgabe ist vollständiger:

" git count-objects -v" lernte, übrig gebliebene temporäre Packdateien und anderen Müll im Objektspeicher zu melden .

VonC
quelle
116

Der git-Befehl

git count-objects -v

gibt Ihnen eine gute Schätzung der Größe des Git-Repositorys. Ohne das Flag -v wird nur die Größe Ihrer entpackten Dateien angezeigt. Dieser Befehl befindet sich möglicherweise nicht in Ihrem $ PATH, Sie müssen ihn möglicherweise aufspüren (unter Ubuntu habe ich ihn beispielsweise in / usr / lib / git-core / gefunden).

Von der Git-Manpage:

-v, --verbose

Zusätzlich zur Anzahl der losen Objekte und des verbrauchten Speicherplatzes werden die Anzahl der In-Pack-Objekte, die Anzahl der Packs, der von diesen Packs verbrauchte Speicherplatz und die Anzahl der Objekte angegeben, die durch Ausführen von git prune-pack entfernt werden können.

Ihre Ausgabe sieht folgendermaßen aus:

count: 1910
size: 19764
in-pack: 41814
packs: 3
size-pack: 1066963
prune-packable: 1
garbage: 0

Die Linie, die Sie suchen, ist size-pack. Dies ist die Größe aller gepackten Festschreibungsobjekte oder die kleinstmögliche Größe für das neue geklonte Repository.

Jack Morrison
quelle
4
Nach meiner Erfahrung git count-objects -vfunktioniert wann git-count-objects -vnicht (weil es nicht in meinem Pfad ist).
Mwolfetech
5
@psihodelia Möglicherweise müssen Sie git gcvor dem Ausführen ausgeführt werden, git count-objects -vda Ihr Repository möglicherweise noch nicht gepackt wurde. Siehe die erste Antwort hier für Beweise: stackoverflow.com/questions/3532740/…
Jack Morrison
5
Sie können grep verwenden, um nur die gewünschte Zeile zu erhalten : git count-objects -vH | grep 'size-pack'. Das Hsoll in menschlich lesbarem Format gezeigt werden, wie @VonC in seiner Antwort sagte.
Alko989
git count-objects --help: size-pack: Speicherplatz, der von den Packs in KiB belegt wird (sofern nicht -H angegeben ist)
auralbee
5

Sie könnten verwenden git-sizer. In der --verboseEinstellung ist die Beispielausgabe (unten). Suchen Sie nach der Total size of filesLinie.

$ git-sizer --verbose
Processing blobs: 1652370
Processing trees: 3396199
Processing commits: 722647
Matching commits to trees: 722647
Processing annotated tags: 534
Processing references: 539
| Name                         | Value     | Level of concern               |
| ---------------------------- | --------- | ------------------------------ |
| Overall repository size      |           |                                |
| * Commits                    |           |                                |
|   * Count                    |   723 k   | *                              |
|   * Total size               |   525 MiB | **                             |
| * Trees                      |           |                                |
|   * Count                    |  3.40 M   | **                             |
|   * Total size               |  9.00 GiB | ****                           |
|   * Total tree entries       |   264 M   | *****                          |
| * Blobs                      |           |                                |
|   * Count                    |  1.65 M   | *                              |
|   * Total size               |  55.8 GiB | *****                          |
| * Annotated tags             |           |                                |
|   * Count                    |   534     |                                |
| * References                 |           |                                |
|   * Count                    |   539     |                                |
|                              |           |                                |
| Biggest objects              |           |                                |
| * Commits                    |           |                                |
|   * Maximum size         [1] |  72.7 KiB | *                              |
|   * Maximum parents      [2] |    66     | ******                         |
| * Trees                      |           |                                |
|   * Maximum entries      [3] |  1.68 k   | *                              |
| * Blobs                      |           |                                |
|   * Maximum size         [4] |  13.5 MiB | *                              |
|                              |           |                                |
| History structure            |           |                                |
| * Maximum history depth      |   136 k   |                                |
| * Maximum tag depth      [5] |     1     |                                |
|                              |           |                                |
| Biggest checkouts            |           |                                |
| * Number of directories  [6] |  4.38 k   | **                             |
| * Maximum path depth     [7] |    13     | *                              |
| * Maximum path length    [8] |   134 B   | *                              |
| * Number of files        [9] |  62.3 k   | *                              |
| * Total size of files    [9] |   747 MiB |                                |
| * Number of symlinks    [10] |    40     |                                |
| * Number of submodules       |     0     |                                |

[1]  91cc53b0c78596a73fa708cceb7313e7168bb146
[2]  2cde51fbd0f310c8a2c5f977e665c0ac3945b46d
[3]  4f86eed5893207aca2c2da86b35b38f2e1ec1fc8 (refs/heads/master:arch/arm/boot/dts)
[4]  a02b6794337286bc12c907c33d5d75537c240bd0 (refs/heads/master:drivers/gpu/drm/amd/include/asic_reg/vega10/NBIO/nbio_6_1_sh_mask.h)
[5]  5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c (refs/tags/v2.6.11)
[6]  1459754b9d9acc2ffac8525bed6691e15913c6e2 (589b754df3f37ca0a1f96fccde7f91c59266f38a^{tree})
[7]  78a269635e76ed927e17d7883f2d90313570fdbc (dae09011115133666e47c35673c0564b0a702db7^{tree})
[8]  ce5f2e31d3bdc1186041fdfd27a5ac96e728f2c5 (refs/heads/master^{tree})
[9]  532bdadc08402b7a72a4b45a2e02e5c710b7d626 (e9ef1fe312b533592e39cddc1327463c30b0ed8d^{tree})
[10] f29a5ea76884ac37e1197bef1941f62fda3f7b99 (f5308d1b83eba20e69df5e0926ba7257c8dd9074^{tree})
serv-inc
quelle
1
Das ist schön, weil es mehr Informationen als nur die gesamte Klongröße anzeigt. Eine Sache, die nicht zeigt, dass ich immer noch gerne wissen möchte, ist, wie groß die ZIP-Datei sein wird, wenn sie heruntergeladen wird (sie enthält nicht alle Commits).
NH.
@IndrajeetGour: Sie müssen von github.com/github/git-sizer/#getting-started installieren . Downloads finden Sie unter github.com/github/git-sizer/releases .
serv-inc
Würde der @downvoter gerne seine Argumentation erklären oder nicht?
serv-inc
1

Wenn Sie Git LFS verwenden, zählen Git Count-Objekte nicht Ihre Binärdateien, sondern nur die Zeiger darauf.

Wenn Ihre LFS-Dateien von Artifactorys verwaltet werden, sollten Sie die REST-API verwenden:

  • Holen Sie sich die www.jfrog.com API von jeder Suchmaschine
  • Schauen Sie sich Get Storage Summary Info an
ähnlich
quelle
1

Ich denke, dies gibt Ihnen die Gesamtliste aller Dateien im Repo-Verlauf:

git rev-list --objects --all | git cat-file --batch-check="%(objectsize) %(rest)" | cut -d" " -f1 | paste -s -d + - | bc

Sie können ersetzen --allmit einem treeish ( HEAD, origin/masterusw.) , um die Größe eines Zweiges zu berechnen.

user541686
quelle
-1

Wenn sich das Repository auf GitHub befindet , können Sie die Open-Source-Android-App Octodroid verwenden, die standardmäßig die Größe des Repositorys anzeigt.

Zum Beispiel mit dem mptcp- Repository:

Größe des Multipath-TCP-Repositorys auf Octodroid

Größe des Repositorys beim Klonen

Haftungsausschluss: Ich habe Octodroid nicht erstellt.

RMPR
quelle
1
Sie sind in verschiedenen Einheiten (GB x GiB). Übrigens 1,71 GB = 1,84 GiB, nur konvertieren und sich nicht um Runden kümmern.
Luciano
Entschuldigung, ich habe sie beim Tippen verwechselt, die richtige Beziehung: 1,71 GiB = 1,84 GB
Luciano