Jak mogę sprawdzić rozmiar repozytorium GitHub przed jego klonowaniem?

330

Czy istnieje sposób, aby sprawdzić, jak duże jest repozytorium Git w GitHub, zanim zdecydujesz się go sklonować?

To wydaje się być naprawdę oczywistą / podstawową statystyką, ale w ogóle nie mogę znaleźć, jak to zobaczyć na GitHub.

jhabbott
źródło
4
@KennyTM bardzo podobne pytanie, tak, ale jest to specyficzne dla github, a nie jakiejkolwiek metody wykorzystującej tylko protokół git.
jhabbott,
1
Do sprawdzenia, to rozszerzenie chrome, które automatycznie dodaje rozmiar repozytorium do podsumowania repozytorium GitHub github.com/harshjv/github-repo-size . AKTUALIZACJA: dodał to jako odpowiedź
Harsh Vakharia
Oto wskazówka: Moje absolutnie największe repozytorium zawiera tylko obrazy różnych formatów, jest to repozytorium „graficzne” ikon, których używam w różnych aplikacjach. Jednak GitHub zgłasza rozmiar jako 0. Więc zakładam, że bierze on pod uwagę tylko rozmiar znanych plików źródłowych i nie bierze pod uwagę nieznanych typów plików.
Jerry Dodge

Odpowiedzi:

276

Istnieje sposób na uzyskanie dostępu do tych informacji za pośrednictwem interfejsu API GitHub .

Podczas pobierania informacji o repozytorium właściwość o nazwie size jest wyceniana na podstawie wielkości całego repozytorium (w tym całej jego historii), w kilobajtach.

Na przykład repozytorium Git waży około 124 MB. sizeWłasnością zwróconego JSON ładunek jest ceniony na 124283.

Aktualizacja

Rozmiar jest rzeczywiście wyrażony w kilobajtach na podstawie użycia dysku przez nagie repozytorium po stronie serwera. Aby jednak nie marnować zbyt wiele miejsca na repozytoria z dużą siecią, GitHub polega na Git Alternates . W tej konfiguracji obliczenie użycia dysku w oparciu o samo repozytorium nie uwzględnia magazynu obiektów współużytkowanych, a zatem zwraca „niekompletną” wartość poprzez wywołanie API.

Ta informacja została podana przez obsługę GitHub.

nulltoken
źródło
12
Nie ma teraz rozmiaru w MB -> To nie jest tak jasne, wygląda na to, że zależy od odpytywanego repozytorium ... Małe repo ujawniają rozmiar w bajtach, duże w megabajtach. Otworzyłem problem w dziale pomocy GitHub. Zaktualizuję odpowiedź, jak tylko problem zostanie zamknięty.
nulltoken
6
To nie wydaje się działać w przypadku prywatnych repozytoriów. Czy coś brakuje? Dzięki!
nroose
14
@nroose Try $ curl -u "{:username}" https://api.github.com/repos/{:organization}/{:repository}. Zobacz developer.github.com/v3/#authentication
nulltoken
1
@nulltoken Jakaś odpowiedź na zapytanie dotyczące KB / MB itp.?
nealmcb
2
Właśnie rozwidliłem repozytorium (9 września 2018 r.) I jest to KB, a nie MB
Jacob Stamm
109

Jeśli jesteś właścicielem repozytorium, możesz znaleźć dokładny rozmiar, otwierając Ustawienia kontaRepozytoria ( https://github.com/settings/repositories ), a rozmiar repozytorium jest wyświetlany obok jego oznaczenia.

Jeśli nie jesteś właścicielem repozytorium, możesz je rozwidlić, a następnie sprawdzić w tym samym miejscu.

Nieco hacky: skorzystaj z download as a zip fileopcji, przeczytaj wskazany rozmiar pliku, a następnie anuluj go.

Nie pamiętam, czy pobieranie jako zip kiedykolwiek działało, ale w każdym razie robi to teraz tylko wybraną gałąź bez historii.

CoatedMoose
źródło
Czy nie należy brać pod uwagę kompresji zip? Myślę, że kod źródłowy i pliki tekstowe można skompresować do około 60%.
sfledgling
Nie jestem pewien, jak sprawdzić współczynnik kompresji zip bez ukończenia pobierania. Oczywiście możesz zakończyć pobieranie, a następnie sprawdzić współczynnik kompresji. Jednak w tym momencie równie dobrze możesz rozpakować i bezpośrednio sprawdzić rozmiar repozytorium. To naprawdę zależy od tego, jak dokładny musisz być. A jeśli możesz sobie pozwolić na pobranie repozytorium do sprawdzenia.
CoatedMoose
1
Nie mogłem go znaleźć Settings > Repositories, ale zamiast tego znalazłem rozmiar repozytorium na Account Settings > Repositoriesstronie głównej git. Oczywiście działa to tylko z repozytoriami, które posiadasz (lub widelcem).
modulitos
Ustawienia konta organizacji nie wydają się pokazywać rozmiaru repozytorium, więc tylko jeśli posiadasz repozytorium jako użytkownik, a nie jako organizacja?
Bennett Brown
2
Rozmiar pliku zip nie wskazuje wcale na rzeczywisty rozmiar repozytorium: 1) zawiera tylko migawkę repozytorium w danej wersji bez historii i 2) Repozytoria Git są przechowywane jako skompresowane pliki paczek, nie należy przechowuj duplikaty itp.
Kynan
74

Jeśli używasz przeglądarki Google Chrome, możesz zainstalować rozszerzenie rozmiaru repozytorium GitHub .

wprowadź opis zdjęcia tutaj

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

Duża fala
źródło
4
jakiś port firefox?
Banee Ishaque K
2
@BaneeIshaqueK to nie to samo, ale pokazuje rozmiar repozytorium sprawdź tutaj
Syed Shamikh Shabbir
1
AKTUALIZACJA Teraz działa doskonale nawet w prywatnych repozytoriach, o ile podasz token Github.
Siddhant Rimal
2
Nadal nie jest niezawodny, używa interfejsu API GitHub, który nie zgłasza prawidłowego rozmiaru. Mam repozytorium zawierające wyłącznie obrazy (bez kodu), a interfejs API zgłasza rozmiar jako 0, chociaż jest to największe repozytorium, jakie mam. To rozszerzenie nawet nie pokazuje mi rozmiaru tego konkretnego repozytorium (prawdopodobnie dlatego, że widzi 0).
Jerry Dodge
19

@larowlan świetny przykładowy kod. Dzięki nowemu interfejsowi API GitHub V3 instrukcja curl musi zostać zaktualizowana. Ponadto logowanie nie jest już wymagane:

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

Na przykład:

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

zwraca 931668(w KB), co jest prawie GB.

VMTrooper
źródło
5
To nie wydaje się działać w przypadku prywatnych repozytoriów. Czy czegoś brakuje? Dzięki!
nroose
1
Chciałbym, abyś poszerzył swoją odpowiedź o kilka wyjaśnień, aby ludzie mogli ją zmienić w zależności od potrzeb.
Shimmy Weitzhandler
10

Aby to zrobić za pomocą curl (sudo apt-get curl) i json pretty (sudo gem install jsonpretty json):

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

Zamień YOURGITHUBUSERNAME na swoją nazwę użytkownika GitHub (patrz rysunek).

Zamień WŁAŚCICIELA na nazwę użytkownika Git właściciela repozytorium. Zamień REPOSITORY na nazwę repozytorium.

Lub jako ładny skrypt Bash (wklej to do pliku o nazwie 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

Używaj go w ten sposób:

gitrepo-info larowlan pisi reel

To da mi informacje o repozytorium pisi / reel na GitHub.

larowlan
źródło
1

Musisz postępować zgodnie z interfejsem API GitHub. Zobacz dokumentację tutaj, aby uzyskać wszystkie szczegóły dotyczące Twojego repozytorium. Wymaga wykonania żądania GET, ponieważ:

GET / repos /: owner /: repository

Musisz wymienić dwie rzeczy:

  1. : owner - nazwa użytkownika osoby, która jest właścicielem repozytorium
  2. : repozytorium - nazwa repozytorium

Na przykład moja nazwa użytkownika maheshmnj i jestem właścicielem repozytorium flutter-ui-nice , więc mój adres GET będzie następujący:

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

Po wysłaniu żądania GET zostaniesz zalany niektórymi danymi JSON i prawdopodobnie w linii nr 78 powinieneś zobaczyć klucz o nazwie rozmiar , który zwróci rozmiar repozytorium.

Wskazówka: podczas pracy z JSON sugeruję dodanie wtyczki, która formatuje dane JSON, aby ułatwić czytanie JSON. Zainstaluj wtyczkę .

maheshmnj
źródło
A) Jak wielu raportuje, ten rozmiar nie jest dokładny i nie jest wiarygodny. B) Nawet jeśli tak, to twoja uwaga dotycząca wizualnego czytania JSON, numeru linii i formatowania ... wszystko bez sensu. JSON nie jest przeznaczony do czytania przez ludzi, lecz do czytania przez komputery. Powinieneś wspomnieć o przeczytaniu sizeklucza w odpowiedzi, a nie linii 78. Nie wspominając, różne formaterowie będą mieli różne podziały linii w różnych miejscach, pozostawiając pożądane dane pod innym numerem linii.
Jerry Dodge
@JerryDodge najpierw należy uważnie przeczytać odpowiedź, o której wspomniałem `` powinieneś zobaczyć klucz o nazwie rozmiar '' i powiedziałem, że powinieneś probablyzobaczyć go w linii nr 78, więc oznacza to, że powinieneś zobaczyć klucz wielkości około 78 , po drugie, jeśli rozmiar z github apis nie był dokładny, nie sądzę, że znajdziesz coś dokładniejszego niż github apis.
maheshmnj
Mam repozytorium obrazów. Obrazy są danymi binarnymi. W tym repozytorium nie ma żadnych plików tekstowych. GitHub zgłasza wszędzie, że zużywa 0 bajtów. Nawet strona internetowa / wtyczka.
Jerry Dodge
0

Podsumowując rozwiązania chakoshy @larowlan, @VMTrooper i @vahid:

#!/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
źródło
0

W przypadku prywatnego repozytorium konieczne będzie uzyskanie tokena dostępu osobistego na stronie https://github.com/settings/tokens .

Następnie użyj następującego polecenia curl, aby uzyskać szczegółowe informacje (podstawiając wartości dla [token], [właściciel] i [nazwa]):

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

Jak wspomniano wcześniej, rozmiar może być w MB lub KB.

Mike Godin
źródło