web-dev-qa-db-fra.com

Trouver la taille de git repo

Quel est un moyen simple de trouver la taille de mon référentiel git? Et je ne parle pas de du -h dans le répertoire racine de mon référentiel. J'ai beaucoup de fichiers ignorés, donc cette taille serait différente de la taille totale de mes prises en pension. Je veux essentiellement savoir quelle quantité de données serait transférée lors du clonage de mon repo.

256
mschallert

UPDATE git 1.8.3 a introduit un moyen plus efficace d'obtenir une taille approximative: git count-objects -vH (voir la réponse de @VonC)

Pour différentes idées de "taille complète", vous pouvez utiliser:

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

Fermer (mais pas exact :)

git gc
du -sh .git/

Avec ce dernier, vous compteriez aussi:

  • crochets
  • config (télécommandes, branches Push, paramètres (espaces, fusion, alias, détails de l'utilisateur, etc.)
  • stash (voir Puis-je extraire une stash d'un dépôt distant dans une branche locale? également)
  • rerere cache (qui peut être considérable)
  • reflogs
  • des sauvegardes (à partir d'une branche de filtre, par exemple) et diverses autres choses (état intermédiaire de rebase, bissect, etc.)
238
sehe

Notez que, depuis git 1.8.3 (22 avril 2013) :

"_git count-objects_" appris "_--human-readable_" ou "_-H_" option permettant d'afficher divers grands nombres dans Ki/Mi/GiB mis à l'échelle si nécessaire .

Cela pourrait être combiné avec l'option _-v_ mentionnée par Jack Morrison dans sa réponse .

_git gc
git count-objects -vH
_

( git gc est important, comme indiqué par A-B-B 's réponse )

De plus (toujours git 1.8.3), la sortie est plus complète:

"_git count-objects -v_" a appris à signaler les fichiers de paquets temporaires restants et autres déchets dans le magasin d'objets .

222
VonC

La commande git

git count-objects -v

vous donnera une bonne estimation de la taille du dépôt git. Sans l'indicateur -v, il ne vous indique que la taille de vos fichiers décompressés. Cette commande peut ne pas être dans votre $ PATH, vous devrez peut-être la localiser (sous Ubuntu, je l'ai trouvée dans/usr/lib/git-core /, par exemple).

De la page de manuel Git:

-v, --verbose

En plus du nombre d'objets perdus et de l'espace disque utilisé, il indique le nombre d'objets intégrés, le nombre de packs, l'espace disque utilisé par ces packs et le nombre d'objets pouvant être supprimés à l'aide de git Prune-packed.

Votre sortie ressemblera à ce qui suit:

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

La ligne que vous recherchez est size-pack. Il s’agit de la taille de tous les objets de validation compressés ou de la plus petite taille possible pour le nouveau référentiel cloné.

105
Jack Morrison

Vous pouvez utiliser git-sizer . Dans le paramètre _--verbose_, l'exemple de sortie est (ci-dessous). Recherchez la ligne _Total size of files_.

_$ 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
serv-inc

I think Ceci vous donne la liste totale de tous les fichiers de l'historique des pensions:

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

Vous pouvez remplacer --all par un arbre (HEAD, Origin/master, etc.) pour calculer la taille d'une branche.

1
Mehrdad

Si vous utilisez git LFS, git count-objects ne compte pas vos fichiers binaires, mais uniquement leurs pointeurs.

Si vos fichiers LFS sont gérés par Artifactory, vous devez utiliser l'API REST:

  • Obtenez l'API www.jfrog.com à partir de n'importe quel moteur de recherche
  • Consulter Obtenir des informations sur le résumé de stockage
1
elike