Trova le dimensioni del repository Git


283

Qual è un modo semplice per trovare le dimensioni del mio repository Git?

E non intendo du -hnella directory principale del mio repository. Ho molti file ignorati, quindi la dimensione sarebbe diversa dalla dimensione del mio repository totale. Voglio essenzialmente sapere quanti dati verrebbero trasferiti dopo la clonazione del mio repository.


Risposte:


260

UPDATE git 1.8.3 ha introdotto un modo più efficiente per ottenere una dimensione approssimativa: git count-objects -vH(vedi risposta di @VonC)

Per idee diverse di "dimensioni complete" è possibile utilizzare:

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

Chiudi (ma non esatto :)

git gc
du -sh .git/

Con quest'ultimo, dovresti anche contare:

  • ganci
  • config (telecomandi, diramazioni push, impostazioni (spazi bianchi, unione, alias, dettagli utente ecc.)
  • stash (vedi Posso recuperare uno stash da un repository remoto in un ramo locale? )
  • rerere cache (che può diventare considerevole)
  • reflogs
  • backup (da branch-filtro, ad es.) e varie altre cose (stato intermedio da rebase, bisect ecc.)

Grazie! Il primo comportamento rifletteva più accuratamente la dimensione totale del clone, ma il secondo era anche piuttosto vicino.
mschallert,

7
Nota: questa risposta non è aggiornata. Vedi invece la risposta di VonC per le versioni git> = 1.8.3.
John Dibling,

Nota anche la mia risposta è un modo più completo, che potrebbe avere il suo merito.
Sehe

Potete per favore aggiungere cosa git bundlee git gceffettivamente fa? creerà un altro archivio (indesiderato) e quindi misurerà le dimensioni?
Ramesh Pareek,

1
@RameshPareek sì. Questo è abbastanza chiaro perché sto usando duper misurare la dimensione di quel file.
Sehe

252

Si noti che, da git 1.8.3 (22 aprile 2013) :

" git count-objects" imparato " --human-readable" aka " -H" opzione per mostrare vari numeri grandi in Ki/ Mi/ GiBridimensionati se necessario.

Ciò potrebbe essere combinato con l' -vopzione menzionata da Jack Morrison nella sua risposta .

git gc
git count-objects -vH

( git gcÈ importante, come detto da ABB 's risposta )

Inoltre (ancora git 1.8.3), l'output è più completo:

" git count-objects -v" imparato a segnalare i pacchetti temporanei rimanenti e altri rifiuti nell'archivio oggetti .


116

Il comando git

git count-objects -v

ti darà una buona stima delle dimensioni del repository git. Senza il flag -v, indica solo la dimensione dei file decompressi. Questo comando potrebbe non essere nel tuo $ PATH, potresti doverlo rintracciare (su Ubuntu l'ho trovato in / usr / lib / git-core /, per esempio).

Dalla pagina man di Git:

-v, --verbose

Oltre al numero di oggetti sciolti e spazio su disco consumato, riporta il numero di oggetti in-pack, il numero di pacchetti, lo spazio su disco consumato da quei pacchetti e il numero di oggetti che possono essere rimossi eseguendo git prune-pack.

L'output sarà simile al seguente:

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

La linea che stai cercando è size-pack. Questa è la dimensione di tutti gli oggetti commit compressi o la dimensione più piccola possibile per il nuovo repository clonato.


4
Nella mia esperienza, git count-objects -vfunziona quando git-count-objects -vno (perché non è nel mio PERCORSO).
mwolfetech,

5
@psihodelia Sembra che potresti dover eseguire git gcprima di eseguire git count-objects -vperché il tuo repository potrebbe non essere ancora stato compresso. Vedere la prima risposta qui per l'evidenza: stackoverflow.com/questions/3532740/…
Jack Morrison

5
È possibile utilizzare grep per ottenere solo la linea desiderata: git count-objects -vH | grep 'size-pack'. Lo Hè mostrarlo in un formato leggibile dall'uomo, come ha detto @VonC nella sua risposta.
alko989,

git count-objects --help: size-pack: spazio su disco consumato dai pacchetti, in KiB (a meno che non sia specificato -H)
auralbee

5

Puoi usare git-sizer. Nella --verboseimpostazione, l'uscita è esempio (sotto). Cerca la Total size of fileslinea.

$ 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
Questo è utile perché mostra più informazioni oltre alla dimensione totale della clonazione. Una cosa che non mostra che mi piacerebbe ancora sapere è quanto sarà grande lo ZIP se scaricato (non contiene tutti i commit).
NH.

@IndrajeetGour: è necessario installare da github.com/github/git-sizer/#getting-started . I download sono disponibili su github.com/github/git-sizer/releases .
serv-inc,

A @downvoter interesserebbe spiegare il suo ragionamento o no?
serv-inc,

1

Se usi git LFS, git count-objects non conta i tuoi binari, ma solo i loro puntatori.

Se i tuoi file LFS sono gestiti da Artifactorys, dovresti usare l'API REST:

  • Ottieni l'API www.jfrog.com da qualsiasi motore di ricerca
  • Guarda Ottieni informazioni di riepilogo di archiviazione

1

Penso che questo ti dia l'elenco completo di tutti i file nella cronologia dei repository:

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

È possibile sostituire --allcon un treeish ( HEAD, origin/master, ecc) per calcolare le dimensioni di un ramo.


-1

Se il repository si trova su GitHub , è possibile utilizzare l'app Android open source Octodroid che visualizza le dimensioni del repository per impostazione predefinita.

Ad esempio, con il repository mptcp :

Dimensione del repository TCP multipath su Octodroid

Dimensione del repository durante la clonazione

Disclaimer: non ho creato Octodroid.


1
Sono in unità diverse (GB x GiB). A proposito, 1,71 GB = 1,84 GiB, sto solo convertendo e senza preoccuparti dei round.
Luciano,

Scusa, li ho confusi durante la digitazione, la relazione corretta: 1,71 GiB = 1,84 GB
Luciano
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.