Znajdź rozmiar repozytorium Git


283

Jaki jest prosty sposób na znalezienie rozmiaru mojego repozytorium Git?

I nie mam du -hna myśli katalogu głównego mojego repozytorium. Mam wiele ignorowanych plików, więc rozmiar ten będzie różny od mojego całkowitego rozmiaru repozytorium. Zasadniczo chcę wiedzieć, ile danych zostanie przeniesionych po sklonowaniu mojego repozytorium.


Odpowiedzi:


260

AKTUALIZACJA git 1.8.3 wprowadził bardziej efektywny sposób uzyskania zgrubnego rozmiaru: git count-objects -vH(patrz odpowiedź @VonC)

Do różnych pomysłów na „pełny rozmiar” możesz użyć:

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

Zamknij (ale nie dokładnie :)

git gc
du -sh .git/

W przypadku tego ostatniego liczyłbyś również:


Dzięki! Pierwsze zachowanie dokładniej odzwierciedlało całkowity rozmiar klonu, ale drugie było również dość zbliżone.
mschallert,

7
Uwaga: ta odpowiedź jest nieaktualna. Zobacz VonC za odpowiedź zamiast git dla wersji> = 1.8.3.
John Dibling

Zwróć też uwagę, że moja odpowiedź jest bardziej kompletna, co może mieć swoje zalety.
widzi

Czy możesz dodać co git bundlei git gcfaktycznie robi? czy utworzy kolejne (niechciane) archiwum, a następnie zmierzy rozmiar?
Ramesh Pareek

1
@RameshPareek tak. Jest to całkiem jasne, ponieważ używam dudo pomiaru rozmiaru tego pliku.
sehe

252

Zauważ, że od wersji 1.8.3 git (22 kwietnia 2013) :

Opcja „ git count-objects” nauczył się „ --human-readable„ aka ” -H”, aby wyświetlać różne duże liczby w Ki/ Mi/ GiBskalowane w razie potrzeby.

Można to połączyć z -vopcją wymienioną przez Jacka Morrisona w jego odpowiedzi .

git gc
git count-objects -vH

( git gcWażne jest, jak wspomniano przez ABB „s odpowiedzi )

Plus (wciąż git 1.8.3), dane wyjściowe są bardziej kompletne:

git count-objects -v” Nauczył się zgłosić resztki tymczasowych packfiles i innych śmieci w sklepie obiektu .


116

Polecenie git

git count-objects -v

da ci dobre oszacowanie rozmiaru repozytorium git. Bez flagi -v pokazuje tylko rozmiar rozpakowanych plików. To polecenie może nie znajdować się w $ PATH, być może będziesz musiał go wyśledzić (na Ubuntu znalazłem go w / usr / lib / git-core /).

Ze strony podręcznika Git:

-v, --verbose

Oprócz liczby luźnych obiektów i zajętego miejsca na dysku, raportuje liczbę obiektów w paczce, liczbę paczek, miejsce na dysku zużywane przez te paczki oraz liczbę obiektów, które można usunąć, uruchamiając pakiet git prune.

Twój wynik będzie wyglądał podobnie do następującego:

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

Linia, której szukasz, to size-pack. Jest to rozmiar wszystkich spakowanych obiektów zatwierdzenia lub najmniejszy możliwy rozmiar nowego sklonowanego repozytorium.


4
Z mojego doświadczenia wynika , że git count-objects -vdziała, gdy git-count-objects -vnie działa (ponieważ nie ma go w mojej ŚCIEŻCE).
mwolfetech,

5
@psihodelia Wygląda na to, że musisz uruchomić git gcprzed uruchomieniem, git count-objects -vponieważ Twoje repozytorium może nie być jeszcze spakowane. Zobacz pierwszą odpowiedź tutaj na dowody: stackoverflow.com/questions/3532740/…
Jack Morrison

5
Można użyć grep uzyskać tylko żądany wiersz: git count-objects -vH | grep 'size-pack'. Ma Hto pokazać go w formacie czytelnym dla człowieka, jak powiedział @VonC w swojej odpowiedzi.
alko989

git count-objects --help: size-pack: miejsce na dysku
zajęte

5

Możesz użyć git-sizer. W --verboseustawieniu przykładowe dane wyjściowe to (poniżej). Poszukaj Total size of fileslinii.

$ 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})

1
Jest to miłe, ponieważ pokazuje więcej informacji niż tylko całkowity rozmiar klonowania. Jedną rzeczą, która nie pokazuje, że nadal chciałbym wiedzieć, jest to, jak duży będzie ZIP, jeśli zostanie pobrany (nie zawiera wszystkich zmian).
NH.

@IndrajeetGour: musisz zainstalować z github.com/github/git-sizer/#getting-started . Pliki do pobrania znajdują się na stronie github.com/github/git-sizer/releases .
serv-inc

Czy @downvoter zechciałby wyjaśnić swoje rozumowanie, czy nie?
serv-inc

1

Jeśli używasz git LFS, git count-objects nie liczy twoich plików binarnych, a jedynie wskaźniki do nich.

Jeśli twoje pliki LFS są zarządzane przez Artifactorys, powinieneś użyć interfejsu API REST:

  • Pobierz interfejs API www.jfrog.com z dowolnej wyszukiwarki
  • Spójrz na Uzyskaj podsumowanie informacji o magazynie

1

Myślę, że daje to pełną listę wszystkich plików w historii repo:

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

Można zastąpić --alldrzewiastym ( HEAD, origin/masteritp.), Aby obliczyć rozmiar gałęzi.


-1

Jeśli repozytorium znajduje się na GitHub , możesz użyć otwartej aplikacji Octodroid na Androida, która domyślnie wyświetla rozmiar repozytorium.

Na przykład z repozytorium mptcp :

Rozmiar wielościeżkowego repozytorium TCP na Octodroid

Rozmiar repozytorium podczas klonowania

Oświadczenie: Nie stworzyłem Octodroid.


1
Są w różnych jednostkach (GB x GiB). Nawiasem mówiąc, 1,71 GB = 1,84 GiB, tylko konwersja i nie dbanie o rundy.
Luciano

Przepraszam, pomieszałem je podczas pisania, poprawna relacja: 1,71 GiB = 1,84 GB
Luciano
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.