Trouver la taille du référentiel Git

283

Quel est un moyen simple de trouver la taille de mon référentiel Git?

Et je ne parle pas du -hdu 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 mon référentiel. Je veux essentiellement savoir combien de données seraient transférées lors du clonage de mon référentiel.

mschallert
la source

Réponses:

260

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 exactement :)

git gc
du -sh .git/

Avec ce dernier, vous compteriez également:

  • crochets
  • config (télécommandes, branches push, paramètres (espace blanc, fusion, alias, détails utilisateur, etc.)
  • stashes (voir Puis-je récupérer une stash d'un dépôt distant dans une branche locale? )
  • rerere cache (qui peut devenir considérable)
  • reflogs
  • sauvegardes (à partir de la branche de filtre, par exemple) et diverses autres choses (état intermédiaire de rebase, bissect, etc.)
sehe
la source
Merci! Le premier comportement reflétait plus précisément la taille totale du clone, mais le second était également assez proche.
mschallert
7
Remarque: cette réponse est obsolète. Voir la réponse de VonC à la place pour les versions git> = 1.8.3.
John Dibling
Notez également que ma réponse est un moyen plus complet, qui pourrait avoir son propre mérite.
sehe
Pouvez-vous s'il vous plaît ajouter quoi git bundleet git gcfait réellement? créera-t-il une autre archive (indésirable) puis mesurera la taille?
Ramesh Pareek
1
@RameshPareek oui. C'est assez clair car j'utilise dupour mesurer la taille de ce fichier.
sehe
252

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

Option " git count-objects" appris " --human-readable" aka " -H" pour afficher divers grands nombres dans Ki/ Mi/ GiBmis à l'échelle selon les besoins.

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

git gc
git count-objects -vH

( git gcest important, comme mentionné par la réponse d' ABB )

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

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

VonC
la source
116

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 vous indique uniquement la taille de vos fichiers décompressés. Cette commande peut ne pas être dans votre $ PATH, vous devrez peut-être la retrouver (sur Ubuntu, je l'ai trouvée dans / usr / lib / git-core /, par exemple).

Depuis la page de manuel Git:

-v, --verbose

En plus du nombre d'objets en vrac et de l'espace disque consommé, il indique le nombre d'objets dans le pack, le nombre de packs, l'espace disque consommé par ces packs et le nombre d'objets qui peuvent être supprimés en exécutant git prune-pack.

Votre résultat 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é.

Jack Morrison
la source
4
D'après mon expérience, git count-objects -vfonctionne quand git-count-objects -vne fonctionne pas (car il n'est pas dans mon CHEMIN).
mwolfetech
5
@psihodelia Il semble que vous deviez peut-être exécuter git gcavant d'exécuter, git count-objects -vcar votre référentiel n'a peut-être pas encore été compressé. Voir la première réponse ici pour des preuves: stackoverflow.com/questions/3532740/…
Jack Morrison
5
Vous pouvez utiliser grep pour obtenir que la ligne souhaitée: git count-objects -vH | grep 'size-pack'. Il Hs'agit de le montrer dans un format lisible par l'homme, comme l'a dit @VonC dans sa réponse.
alko989
git count-objects --help: size-pack: espace disque consommé par les packs, en Kio (sauf si -H est spécifié)
auralbee
5

Vous pourriez utiliser git-sizer. Dans le --verboseréglage, l'exemple de sortie est (ci-dessous). Recherchez la Total size of filesligne.

$ 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
la source
1
C'est bien car cela montre plus d'informations que la taille totale du clonage. Une chose ne montre pas que j'aimerais encore savoir quelle est la taille du ZIP s'il est téléchargé (il ne contient pas tous les commits).
NH.
@IndrajeetGour: vous devez installer à partir de github.com/github/git-sizer/#getting-started . Les téléchargements se trouvent sur github.com/github/git-sizer/releases .
serv-inc
Est-ce que @downvoter se soucierait d'expliquer son raisonnement, ou non?
serv-inc
1

Si vous utilisez git LFS, git count-objets ne compte pas vos binaires, mais seulement les pointeurs vers eux.

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

  • Obtenez l'API www.jfrog.com à partir de n'importe quel moteur de recherche
  • Regardez les informations sur le résumé du stockage
elike
la source
1

Je pense que cela vous donne la liste totale de tous les fichiers de l'historique du dépôt:

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

Vous pouvez remplacer --allpar un treeish ( HEAD, origin/master, etc.) pour calculer la taille d'une branche.

user541686
la source
-1

Si le référentiel est sur GitHub , vous pouvez utiliser l'application Android open source Octodroid qui affiche la taille du référentiel par défaut.

Par exemple, avec le référentiel mptcp :

Taille du référentiel TCP multipath sur Octodroid

Taille du référentiel lors du clonage

Avertissement: je n'ai pas créé Octodroid.

RMPR
la source
1
Ils sont dans des unités différentes (Go x Gio). Au fait, 1,71 Go = 1,84 Gio, il suffit de convertir et de ne pas se soucier des tours.
Luciano
Désolé, je les ai mélangés lors de la frappe, la relation correcte: 1,71 Gio = 1,84 Go
Luciano