Encuentra el tamaño del repositorio de Git

283

¿Cuál es una manera simple de encontrar el tamaño de mi repositorio Git?

Y no me refiero du -hal directorio raíz de mi repositorio. Tengo muchos archivos ignorados, por lo que ese tamaño sería diferente del tamaño total de mi repositorio. Básicamente quiero saber cuántos datos se transferirán al clonar mi repositorio.

mschallert
fuente

Respuestas:

260

ACTUALIZACIÓN git 1.8.3 introdujo una forma más eficiente de obtener un tamaño aproximado: git count-objects -vH(ver respuesta de @VonC)

Para diferentes ideas de "tamaño completo" puede usar:

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

Cerrar (pero no exacto :)

git gc
du -sh .git/

Con este último, también estarías contando:

  • manos
  • config (controles remotos, ramas push, configuraciones (espacios en blanco, fusión, alias, detalles del usuario, etc.)
  • escondites (consulte ¿Puedo recuperar un escondite de un repositorio remoto en una sucursal local? también)
  • rerere cache (que puede ser considerable)
  • reflogs
  • copias de seguridad (desde rama de filtro, por ejemplo) y varias otras cosas (estado intermedio de rebase, bisección, etc.)
sehe
fuente
¡Gracias! El primer comportamiento reflejó con mayor precisión el tamaño total del clon, pero el segundo también estuvo bastante cerca.
mschallert
77
Nota: esta respuesta no está actualizada. Vea la respuesta de VonC para las versiones de git> = 1.8.3.
John Dibling
Tenga en cuenta también que mi respuesta es una forma más completa, que podría tener sus propios méritos.
sehe
¿Puedes agregar qué git bundley qué git gchace realmente? ¿creará otro archivo (no deseado) y luego medirá el tamaño?
Ramesh Pareek
1
@RameshPareek sí. Esto es bastante claro porque estoy usando dupara medir el tamaño de ese archivo.
sehe
252

Tenga en cuenta que, desde git 1.8.3 (22 de abril de 2013) :

Opción " git count-objects" aprendido " --human-readable" aka " -H" para mostrar varios números grandes en Ki/ Mi/ GiBescalados según sea necesario.

Eso podría combinarse con la -vopción mencionada por Jack Morrison en su respuesta .

git gc
git count-objects -vH

( git gces importante, como se menciona en la respuesta de ABB )

Además (todavía git 1.8.3), la salida es más completa:

" git count-objects -v" aprendió a informar sobre los archivos temporales sobrantes y otra basura en el almacén de objetos .

VonC
fuente
116

El comando git

git count-objects -v

le dará una buena estimación del tamaño del repositorio git. Sin la bandera -v, solo le indica el tamaño de sus archivos desempaquetados. Es posible que este comando no esté en su $ PATH, es posible que deba rastrearlo (en Ubuntu lo encontré en / usr / lib / git-core /, por ejemplo).

Desde la página de manual de Git:

-v, --verbose

Además de la cantidad de objetos sueltos y el espacio en disco consumido, informa la cantidad de objetos en paquete, la cantidad de paquetes, el espacio en disco consumido por esos paquetes y la cantidad de objetos que se pueden eliminar ejecutando git prune-pack.

Su salida será similar a la siguiente:

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

La línea que estás buscando es size-pack. Ese es el tamaño de todos los objetos de confirmación empaquetados, o el tamaño más pequeño posible para el nuevo repositorio clonado.

Jack Morrison
fuente
44
En mi experiencia, git count-objects -vfunciona cuando git-count-objects -vno (porque no está en mi RUTA).
mwolfetech
55
@psihodelia Parece que es posible que tenga que ejecutar git gcantes de ejecutar git count-objects -vporque es posible que su repositorio aún no se haya empaquetado. Vea la primera respuesta aquí para obtener evidencia: stackoverflow.com/questions/3532740/…
Jack Morrison el
55
Puede usar grep para obtener solo la línea deseada: git count-objects -vH | grep 'size-pack' . El Hobjetivo es mostrarlo en formato legible para humanos, como dijo @VonC en su respuesta.
alko989
git count-objects --help: size-pack: espacio en disco consumido por los paquetes, en KiB (a menos que se especifique -H)
auralbee
5

Podrías usar git-sizer. En la --verboseconfiguración, el resultado de ejemplo es (abajo). Busca la Total size of fileslínea.

$ 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
fuente
1
Esto es bueno porque muestra más información que solo el tamaño total de clonación. Una cosa que no muestra que todavía me gustaría saber es qué tan grande será el ZIP si se descarga (no contiene todos los commits).
NH.
@IndrajeetGour: necesita instalar desde github.com/github/git-sizer/#getting-started . Las descargas están en github.com/github/git-sizer/releases .
serv-inc
¿Le gustaría al @downvoter explicar su razonamiento, o no?
serv-inc
1

Si usa git LFS, git count-objects no cuenta sus binarios, sino solo los punteros a ellos.

Si sus archivos LFS son administrados por Artifactorys, debe usar la API REST:

  • Obtenga la API www.jfrog.com de cualquier motor de búsqueda
  • Mira Obtener información de resumen de almacenamiento
elike
fuente
1

Creo que esto te da la lista total de todos los archivos en el historial de repositorios:

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

Se puede reemplazar --allcon un treeish ( HEAD, origin/master, etc.) para calcular el tamaño de una rama.

usuario541686
fuente
-1

Si el repositorio está en GitHub , puede usar la aplicación de Android de código abierto Octodroid que muestra el tamaño del repositorio de forma predeterminada.

Por ejemplo, con el repositorio mptcp :

Tamaño del repositorio TCP de múltiples rutas en Octodroid

Tamaño del repositorio mientras se clona

Descargo de responsabilidad: no creé Octodroid.

RMPR
fuente
1
Están en diferentes unidades (GB x GiB). Por cierto 1.71 GB = 1.84 GiB, simplemente convirtiendo y sin importar las rondas.
Luciano
Lo siento, los confundí al escribir, la relación correcta: 1.71 GiB = 1.84 GB
Luciano