Comment puis-je voir la taille d'un référentiel GitHub avant de le cloner?

331

Existe-t-il un moyen de voir la taille d'un référentiel Git sur GitHub avant de décider de le cloner?

Cela semble être une statistique vraiment évidente / basique, mais je ne trouve pas du tout comment la voir sur GitHub.

jhabbott
la source
4
@KennyTM question très similaire, oui, mais cela est spécifique à github plutôt qu'à toute méthode utilisant uniquement le protocole git.
jhabbott
1
Pour info, consultez cette extension chrome qui ajoute automatiquement la taille du référentiel au récapitulatif du référentiel de GitHub github.com/harshjv/github-repo-size . MISE À JOUR: ajouté ceci comme réponse
Harsh Vakharia
Voici un indice: mon plus grand référentiel absolu ne contient que des images de différents formats, c'est un dépôt "d'illustrations" d'icônes que j'utilise dans diverses applications. Pourtant, GitHub signale la taille à 0. Je suppose donc qu'il ne prend en compte que la taille des fichiers source connus et ne prend pas en compte les types de fichiers inconnus.
Jerry Dodge

Réponses:

276

Il existe un moyen d'accéder à ces informations via l' API GitHub .

Lors de la récupération d'informations sur un référentiel, une propriété nommée sizeest évaluée avec la taille de l'ensemble du référentiel (y compris tout son historique), en kilo-octets.

Par exemple, le référentiel Git pèse environ 124 Mo. La sizepropriété de la charge utile JSON retournée est évaluée à 124283.

Mettre à jour

La taille est en effet exprimée en kilo-octets en fonction de l'utilisation du disque du référentiel nu côté serveur. Cependant, afin d'éviter de gaspiller trop d'espace avec des référentiels avec un grand réseau, GitHub s'appuie sur Git Alternates . Dans cette configuration, le calcul de l'utilisation du disque par rapport au référentiel nu ne tient pas compte du magasin d'objets partagés et renvoie donc une valeur "incomplète" via l'appel d'API.

Ces informations ont été fournies par le support GitHub.

nulltoken
la source
12
N'est-ce pas la taille en Mo maintenant -> Ce n'est pas si clair, il semble que cela dépend du référentiel interrogé ... Les petits dépôts exposent la taille en octets, les grands en mégaoctets. J'ai ouvert un problème au niveau du support GitHub. Je mettrai à jour la réponse dès que le problème sera clos.
nulltoken
6
Cela ne semble pas fonctionner pour les dépôts privés. Suis-je en train de manquer quelque chose? Merci!
nroose
14
@nroose Essayez $ curl -u "{:username}" https://api.github.com/repos/{:organization}/{:repository}. Voir developer.github.com/v3/#authentication
nulltoken
1
@nulltoken Une réponse à la question sur kB / MB etc?
nealmcb
2
Je viens de bifurquer un repo (9 septembre 2018) et c'est ko, pas MB
Jacob Stamm
109

Si vous êtes propriétaire du référentiel, vous pouvez trouver la taille exacte en ouvrant vos paramètres de compteréférentiels ( https://github.com/settings/repositories ), et la taille du référentiel s'affiche à côté de sa désignation.

Si vous ne possédez pas le référentiel, vous pouvez le bifurquer puis le vérifier au même endroit.

Un peu hacky: utilisez l' download as a zip fileoption, lisez la taille de fichier indiquée puis annulez-la.

Je ne me souviens pas si le téléchargement en zip a déjà fonctionné, mais en tout cas, cela ne télécharge maintenant que la branche actuellement sélectionnée sans historique.

CoatedMoose
la source
Ne faut-il pas prendre en compte la compression zip? Le code source et les fichiers texte peuvent être compressés jusqu'à environ 60% je pense.
ffledgling
Je ne connais pas de moyen de vérifier le taux de compression du zip sans terminer le téléchargement. Bien sûr, vous pouvez terminer le téléchargement, puis vérifier le taux de compression. Cependant, à ce stade, vous pourriez aussi bien décompresser et vérifier directement la taille du dépôt. Cela dépend vraiment de la précision dont vous avez besoin. Et si vous pouvez vous permettre de télécharger le dépôt pour vérifier.
CoatedMoose
1
Je ne pouvais pas le trouver Settings > Repositories, mais j'ai trouvé la taille du repo sous Account Settings > Repositoriesvotre page d'accueil git. Bien sûr, cela ne fonctionne qu'avec les dépôts que vous possédez (ou fork).
modulitos
Les paramètres de compte des organisations ne semblent pas afficher la taille du référentiel, donc ce n'est que si vous possédez un référentiel en tant qu'utilisateur et non en tant qu'organisation?
Bennett Brown
2
La taille du fichier zip n'est pas du tout une indication de la taille réelle du référentiel: 1) il comprend uniquement un instantané du référentiel à une révision donnée sans historique et 2) les référentiels Git sont stockés sous forme de fichiers pack compressés, ne le faites pas stocker les doublons, etc.
kynan
74

Si vous utilisez le navigateur Google Chrome, vous pouvez installer l' extension GitHub Repository Size .

entrez la description de l'image ici

Repo ici: https://github.com/harshjv/github-repo-size

Grande vague
la source
4
un port firefox?
Banee Ishaque K
2
@BaneeIshaqueK ce n'est pas la même chose mais cela vous montre la taille du référentiel, vérifiez ici
Syed Shamikh Shabbir
1
MISE À JOUR Maintenant, fonctionne parfaitement même dans les référentiels privés tant que vous fournissez le jeton Github.
Siddhant Rimal
2
Toujours pas fiable, il utilise l'API GitHub, qui ne rapporte pas la taille correcte. J'ai un référentiel avec rien que des images (pas de code), et l'API signale la taille à 0, bien que ce soit le plus grand repo que j'ai. Cette extension ne me montre même pas la taille de ce dépôt particulier (probablement parce qu'il voit 0).
Jerry Dodge
19

@larowlan excellent exemple de code. Avec la nouvelle API GitHub V3, l'instruction curl doit être mise à jour. De plus, la connexion n'est plus requise:

curl https://api.github.com/repos/$2/$3 2> /dev/null | grep size | tr -dc '[:digit:]'

Par exemple:

curl https://api.github.com/repos/dotnet/roslyn 2> /dev/null | grep size | tr -dc '[:digit:]'

renvoie 931668(en Ko), ce qui représente presque un Go.

VMTrooper
la source
5
Cela ne semble pas fonctionner pour les dépôts privés. Y a-t-il quelque chose qui me manque? Merci!
nroose
1
Je souhaite que vous développiez votre réponse davantage avec quelques explications, afin que les gens puissent la changer pour répondre à leurs besoins.
Shimmy Weitzhandler
10

Pour ce faire avec curl (sudo apt-get curl) et json pretty (sudo gem install jsonpretty json):

curl -u "YOURGITHUBUSERNAME" http://github.com/api/v2/json/repos/show/OWNER/REPOSITORY |
  jsonpretty

Remplacez YOURGITHUBUSERNAME par votre nom d'utilisateur GitHub (allez voir la figure).

Remplacez OWNER par le nom d'utilisateur Git du propriétaire du référentiel. Remplacez REPOSITORY par le nom du référentiel.

Ou comme un joli script Bash (collez-le dans un fichier nommé gitrepo-info):

#!/bin/bash
if [ $# -ne 3 ]
then
  echo "Usage: gitrepo-info <username> <owner> <repo>"
  exit 65
fi
curl -u "$1" http://github.com/api/v2/json/repos/show/$2/$3|jsonpretty

Utilisez-le comme ceci:

gitrepo-info larowlan pisi reel

Cela me donnera des informations sur le référentiel pisi / reel sur GitHub.

larowlan
la source
1

Vous devez suivre l'API GitHub. Consultez la documentation ici pour tous les détails concernant votre référentiel. Il vous oblige à faire une demande GET comme:

GET / repos /: propriétaire /: référentiel

Vous devez remplacer deux choses:

  1. : propriétaire - le nom d'utilisateur de la personne qui possède le référentiel
  2. : repository - Le nom du référentiel

Par exemple, mon nom d'utilisateur maheshmnj et je possède un référentiel, flutter-ui-nice , donc mon URL GET sera:

https://api.github.com/repos/maheshmnj/flutter-ui-nice

Lors d'une demande GET, vous serez inondé de données JSON et probablement sur la ligne 78, vous devriez voir une clé nommée taille qui renverra la taille du référentiel.

Astuce: lorsque vous travaillez avec JSON, je vous suggère d'ajouter un plugin qui formate les données JSON pour faciliter la lecture de JSON. Installez le plugin .

maheshmnj
la source
A) Comme beaucoup le déclarent, cette taille n'est ni précise ni fiable. B) Même si c'était le cas, vos notes sur la lecture visuelle du JSON, le numéro de ligne et le formatage ... tout cela est inutile. JSON n'est pas destiné aux humains à lire, il est destiné aux ordinateurs à lire. Vous devriez mentionner de lire la sizeclé dans la réponse, pas la ligne 78. Sans oublier, différents formateurs auront des sauts de ligne différents à différents endroits, laissant les données souhaitées à un numéro de ligne différent.
Jerry Dodge
@JerryDodge première chose que vous devriez lire attentivement la réponse que j'ai mentionnée `` vous devriez voir une clé nommée taille '' et j'ai dit que vous devriez la probablyvoir sur la ligne n ° 78, ce qui indique que vous devriez voir la clé de taille quelque part autour de 78 , deuxième chose si la taille des API Github n'était pas précise, je ne pense pas que vous trouverez quelque chose de plus précis que les API Github.
maheshmnj
J'ai un référentiel d'images. Les images sont des données binaires. Il n'y a aucun fichier texte dans ce dépôt. GitHub signale partout qu'il consomme 0 octet. Même le site Web / plugin.
Jerry Dodge
0

Pour résumer les solutions @larowlan, @VMTrooper et @vahid chakoshy:

#!/usr/bin/env bash


if [ "$#" -eq 2 ]; then
    echo "$(echo "scale=2; $(curl https://api.github.com/repos/$1/$2 2>/dev/null \
    | grep size | head -1 | tr -dc '[:digit:]') / 1024" | bc)MB"
elif [ "$#" -eq 3 ] && [ "$1" == "-z" ]; then
    # For some reason Content-Length header is returned only on second try
    curl -I https://codeload.github.com/$2/$3/zip/master &>/dev/null  
    echo "$(echo "scale=2; $(curl -I https://codeload.github.com/$2/$3/zip/master \
    2>/dev/null | grep Content-Length | cut -d' ' -f2 | tr -d '\r') / 1024 / 1024" \
    | bc)MB"
else
    printf "Usage: $(basename $0) [-z] OWNER REPO\n\n"
    printf "Get github repository size or, optionally [-z], the size of the zipped\n"
    printf "master branch (`Download ZIP` link on repo page).\n"
    exit 1
fi
Golem
la source
0

Pour un référentiel privé, vous devrez obtenir un jeton d'accès personnel sur https://github.com/settings/tokens .

Utilisez ensuite la commande curl suivante pour obtenir les détails (en remplaçant les valeurs par [jeton], [propriétaire] et [nom]):

curl -u git:[token] https://api.github.com/repos/[owner]/[name] 2> /dev/null | grep size

Comme mentionné précédemment, la taille peut être en Mo ou en Ko.

Mike Godin
la source