Encontre o tamanho do repositório Git

283

Qual é uma maneira simples de encontrar o tamanho do meu repositório Git?

E eu não quero dizer du -hno diretório raiz do meu repositório. Eu tenho muitos arquivos ignorados, portanto esse tamanho seria diferente do tamanho total do meu repositório. Quero essencialmente saber quantos dados seriam transferidos ao clonar meu repositório.

mschallert
fonte

Respostas:

260

ATUALIZAÇÃO O git 1.8.3 introduziu uma maneira mais eficiente de obter um tamanho aproximado: git count-objects -vH(veja a resposta em @VonC)

Para idéias diferentes de "tamanho completo", você pode usar:

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

Fechar (mas não exato)

git gc
du -sh .git/

Com o último, você também contaria:

  • ganchos
  • config (controles remotos, ramificações push, configurações (espaço em branco, mesclagem, aliases, detalhes do usuário etc.)
  • stashes (consulte Posso buscar um stash de um repositório remoto em uma filial local? também)
  • rerere cache (que pode ser considerável)
  • reflogs
  • backups (da ramificação do filtro, por exemplo) e várias outras coisas (estado intermediário da rebase, bissecção etc.)
ver
fonte
Obrigado! O primeiro comportamento refletiu com mais precisão o tamanho total do clone, mas o segundo também foi bem próximo.
mschallert
7
Nota: esta resposta está desatualizada. Veja a resposta do VonC para versões git> = 1.8.3.
John Dibling
Note também que minha resposta é uma maneira mais completa, que pode ter seu próprio mérito.
sehe
Você pode por favor adicionar o que git bundlee git gcrealmente faz? ele criará outro arquivo (indesejado) e medirá o tamanho?
Ramesh Pareek 25/05
1
@RameshPareek yes. Isso está bem claro, porque estou usando dupara medir o tamanho desse arquivo.
Veja
252

Observe que, desde o git 1.8.3 (22 de abril de 2013) :

" git count-objects" aprendeu " --human-readable" aka " -H" opção para mostrar vários números grandes em Ki/ Mi/ GiBredimensionados conforme necessário.

Isso poderia ser combinado com a -vopção mencionada por Jack Morrison em sua resposta .

git gc
git count-objects -vH

( git gcÉ importante, tal como mencionado por ABB de resposta )

Além disso (ainda git 1.8.3), a saída é mais completa:

" git count-objects -v" aprendeu a relatar sobras de pacotes temporários e outro lixo no armazenamento de objetos .

VonC
fonte
116

O comando git

git count-objects -v

lhe dará uma boa estimativa do tamanho do repositório git. Sem o sinalizador -v, ele informa apenas o tamanho dos arquivos descompactados. Este comando pode não estar no seu $ PATH, talvez seja necessário localizá-lo (no Ubuntu, encontrei-o em / usr / lib / git-core /, por exemplo).

Na página de manual do Git:

-v, --verbose

Além do número de objetos soltos e do espaço em disco consumido, ele informa o número de objetos no pacote, o número de pacotes, o espaço em disco consumido por esses pacotes e o número de objetos que podem ser removidos executando o git Prune-Packed.

Sua saída será semelhante à seguinte:

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

A linha que você está procurando é size-pack. Esse é o tamanho de todos os objetos de confirmação compactados ou o menor tamanho possível para o novo repositório clonado.

Jack Morrison
fonte
4
Na minha experiência, git count-objects -vfunciona quando git-count-objects -vnão funciona (porque não está no meu caminho).
Mwolfetech 7/08
5
@psihodelia Parece que você deve executar git gcantes de executar, git count-objects -vporque seu repositório ainda não foi compactado. Veja a primeira resposta aqui para obter evidências: stackoverflow.com/questions/3532740/…
Jack Morrison
5
Você pode usar o grep para obter apenas a linha desejada: git count-objects -vH | grep 'size-pack'. O Hé mostrá-lo em formato legível por humanos, como o @VonC disse em sua resposta.
alko989
git count-objects --help: Tamanho de pacote: espaço de disco consumido pelos pacotes, em KiB (a menos que seja especificado -H)
auralbee
5

Você poderia usar git-sizer. Na --verboseconfiguração, o exemplo de saída é (abaixo). Procure a Total size of fileslinha.

$ 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
fonte
1
Isso é bom porque mostra mais informações do que apenas o tamanho total da clonagem. Uma coisa que não mostra que eu ainda gostaria de saber é o tamanho do ZIP se for baixado (ele não contém todos os commits).
NH.
@IndrajeetGour: você precisa instalar no github.com/github/git-sizer/#getting-started . Os downloads estão em github.com/github/git-sizer/releases .
serv-inc
O @downvoter se importaria de explicar seu raciocínio ou não?
serv-inc
1

Se você usa o git LFS, o git count-objects não conta seus binários, mas apenas os ponteiros para eles.

Se seus arquivos LFS forem gerenciados por Artifactorys, você deverá usar a API REST:

  • Obtenha a API www.jfrog.com em qualquer mecanismo de pesquisa
  • Veja Obter informações de resumo do armazenamento
parecido
fonte
1

Acho que isso fornece a lista total de todos os arquivos no histórico do repositório:

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

Você pode substituir --allcom um treeish ( HEAD, origin/master, etc.) para calcular o tamanho de um ramo.

user541686
fonte
-1

Se o repositório estiver no GitHub , você poderá usar o aplicativo Android de código aberto Octodroid, que exibe o tamanho do repositório por padrão.

Por exemplo, com o repositório mptcp :

Tamanho do repositório TCP de caminhos múltiplos no Octodroid

Tamanho do repositório durante a clonagem

Disclaimer: Eu não criei o Octodroid.

RMPR
fonte
1
Eles estão em unidades diferentes (GB x GiB). By the way 1,71 GB = 1,84 GiB, apenas convertendo e não se importando com rodadas.
Luciano
Desculpe, eu as misturei ao digitar, a relação correta: 1,71 GiB = 1,84 GB
Luciano