Pytanie Oszacuj rozmiar repozytorium Git przed jego sklonowaniem


Czy istnieje sposób oszacowania rozmiaru publicznego repozytorium Git bez konieczności klonowania?

Chciałbym użyć tych informacji, aby upewnić się, że repozytorium jest mniejsze niż pewien rozmiar. Jeśli nie, nie chcę tego sklonować.

Wiem, że można to zrobić na Githubie, ale to repozytorium jest hostowane na dedykowanym serwerze.


16
2018-02-23 16:18


pochodzenie


Czy możesz ssh na serwer i wykonaj du?
Nie, nie mogę ssh w tym. - PJ Bergeron
Myślę, że bylibyśmy w stanie pomóc lepiej, gdybyśmy wiedzieli, dlaczego potrzebujesz tych informacji. - Schwern


Odpowiedzi:


Krótka odpowiedź: Nnn ... może.

Długa odpowiedź: Istnieje kilka heurystyk i możesz poklepać się po Protokoły przesyłania Git zebrać trochę informacji.

Moją osobistą obserwacją jest to, że w przypadku większości projektów tekstowych rozmiar .git rzadko jest większy niż rozmiar zamówienia, nawet w przypadku bardzo starych projektów.

Ujmujący info/refs powie Ci, ile tagów i gałęzi znajduje się w repozytorium.

Ujmujący objects/info/packs powie Ci, jakie pakiety znajdują się w projekcie. Następnie można wykonać żądanie HEAD (zakładając, że jest to protokół HTTP) objects/pack/pack-WHATEVERTHEIDIS.pack aby zobaczyć, jak duże są pliki pakietów. To da ci niższą granicę dla rozmiaru repozytorium.

Jeśli miejsce na dysku jest problemem (dysk jest tani, kup nowy), możesz zrobić git clone --bare aby zaoszczędzić miejsce na kasie. Następnie możesz sklonować tę lokalną, nieobsługiwaną wersję, aby uzyskać pełne zakupy.

Wreszcie, jeśli jesteś sprytny, możesz przejść drzewo obiektów, wykonując żądanie HEAD, aby uzyskać rozmiar każdego obiektu i anulować obiekt GET po otrzymaniu tylko nagłówka (ignorując część danych). Daje to rozmiar repozytorium bez konieczności pobierania całego repozytorium.


6
2018-02-23 18:03





Krótka odpowiedź: "nie".

Jeśli przestrzeń jest w ogóle problemem, sklonuj repo do swojej największej dostępnej przestrzeni darmowej, a jeśli jest wystarczająco dużo, aby przenieść gdzie indziej, będzie tanie.

Naprawdę brutalny sposób, aby go zdobyć: umieść to np. twój hak po otrzymaniu na serwerze

git for-each-ref refs/size | while read . . ref; do git update-ref --delete $ref; done
set -- $(du -sh .git/objects)
git update-ref refs/size/$1-as-of-$(date +%Y%m%dT%H%M%S%Z) HEAD

i możesz po prostu ls-remote dla niego.


6
2018-02-23 17:27



Dzięki za odpowiedź. Właściwie chciałbym się upewnić, że repo jest mniejsze niż 100 MB. Zmieniłem moje pytanie. - PJ Bergeron