2010-05-21 2 views
34

Angenommen, irgendwo im Web existiert ein öffentliches Git-Repository. Ich möchte es klonen, aber zuerst muss ich sicher sein, was ist die Größe davon (wie viele Objekte & kbytes wie in git count-objects)Ist es möglich, Objekt und Größe des Git-Repositorys remote zu zählen?

Gibt es eine Möglichkeit, es zu tun?

+2

@Dogbert Sie die Größe eines GitHub herausfinden können, Repository dank ihrer API (siehe diese [SO Frage] (http: // Stackoverflow. com/questions/8646517/size-of-a-github-repo-vor-klonen-it)). Ich habe jedoch nichts in Bezug auf die Anzahl der Objekte gefunden. Hth. – nulltoken

Antwort

16

Ein wenig Flickschusterei Sie wäre die folgende verwenden:

entlang dieser Linien
mkdir repo-name 
cd repo-name 
git init 
git remote add origin <URL of remote> 
git fetch origin 

git fetch Displays Feedback:

remote: Counting objects: 95815, done. 
remote: Compressing objects: 100% (25006/25006), done. 
remote: Total 95815 (delta 69568), reused 95445 (delta 69317) 
Receiving objects: 100% (95815/95815), 18.48 MiB | 16.84 MiB/s, done. 
... 

Die Schritte auf dem entfernten Ende der Regel ziemlich schnell passieren; es ist der Empfangsschritt, der zeitaufwendig sein kann. Es zeigt nicht die Gesamtgröße, aber Sie können es sicherlich für eine Sekunde sehen, und wenn Sie "1% ... 23.75 GiB" sehen, wissen Sie, dass Sie in Schwierigkeiten sind, und Sie können es abbrechen.

+5

Sind Sie sicher, dass dies gültig ist? Ich denke, der Prozentsatz repräsentiert die Anzahl der empfangenen Objekte und nicht die Größe der Daten. – jhabbott

+1

Ich habe nicht gesagt, dass Sie dadurch genaue Zahlen erhalten, sondern dass Sie damit feststellen können, ob das Repository obszön groß ist. – Cascabel

+2

Wenn Sie diese Route gehen möchten, können Sie einfach 'git fetch --dry-run' ausführen und dann müssen Sie sich vor dem Datentransfer keine Gedanken über das Abbrechen machen. Aber Sie haben beide recht, es ist ein unvollkommener Klotz. –

1

Nicht, dass ich kenne:
Git kein Server ist, gibt es nichts standardmäßig auf eine Anfrage zu hören (es sei denn, Sie aktivieren eine gitweb oder eine gitolite Schicht)
und den Befehl „git remote ...“ beschäftigt sich mit der local kopieren (geholt) eines Remote Repo.

Also, wenn Sie etwas holen, oder clone --bare ein Remote-Repo, werden Sie keine Ahnung von seiner Größe haben.
Und das enthält nicht die Größe des Arbeitsverzeichnisses, einmal ausgecheckt.

2

Ich denke, es gibt ein paar Probleme mit dieser Frage ist: git count-objects nicht wirklich die Größe eines Endlagers dar (auch git count-object -v nicht wirklich); Wenn Sie etwas anderes als den dummen http-Transport verwenden, wird ein neues Paket für Ihren Klon erstellt, sobald Sie ihn erstellen. und (wie VonC wies auf hin) alles, was Sie tun, um eine Remote-Repo zu analysieren, wird die Arbeitskopie Größe nicht berücksichtigen.

aber sagen, dass, wenn sie die stummen http Transport verwenden (Github zum Beispiel nicht ist), könnten Sie ein Shell-Skript schreiben, die verwendet curl die Größen aller die Objekte und Packungen abzufragen. Das könnte Ihnen näher bringen, aber es macht mehr http Anfragen, die Sie nur noch einmal machen müssen, um den Klon tatsächlich zu tun.

Es ist möglich, um herauszufinden, was git-fetch über den Draht (mit einem Smart http Transport) senden würde und dass die Ergebnisse zu analysieren schicken, aber es ist nicht wirklich eine nette Sache zu tun. Im Wesentlichen bitten Sie den Zielserver, Ergebnisse, die Sie gerade herunterladen und wegwerfen, zu packen, so dass Sie sie wieder herunterladen können , um sie zu speichern.

So etwas wie diese Schritte können zu diesem Zweck verwendet werden:

url=https://github.com/gitster/git.git 
git ls-remote $url | 
    grep '[[:space:]]\(HEAD\|refs/heads/master\|refs/tags\)' | 
    grep -v '\^{}$' | awk '{print "0032want " $1}' > binarydata 
echo 00000009done >> binarydata 
curl -s -X POST --data-binary @binarydata \ 
    -H "Content-Type: application/x-git-upload-pack-request" \ 
    -H "Accept-Encoding: deflate, gzip" \ 
    -H "Accept: application/x-git-upload-pack-result" \ 
    -A "git/1.7.9" $url/git-upload-pack | wc -c 

Am Ende all dies wird sich der Remote-Server gepackt Master/HEAD und alle Tags für Sie und Sie werden heruntergeladen haben die gesamte Pack-Datei nur auf sehen, wie groß es sein wird, wenn Sie es während Ihres Klon herunterladen.

Wenn Sie schließlich einen Klon tun, wird die Arbeitskopie als auch erstellt werden, so dass das gesamte Verzeichnis wird größer sein als diese Befehle ausspucken, aber die Pack-Datei ist in der Regel der größte Teil einer Arbeitskopie mit irgend bedeutende Geschichte.

12

Für das Repository github bietet es jetzt eine API zur Überprüfung der Dateigröße an. Es klappt!

Dieser Link: see-the-size-of-a-github-repo-before-cloning-it gab die Antwort

Befehl: (Antwort von @VMTrooper)

curl https://api.github.com/repos/$2/$3 | grep size 

Beispiel:

curl https://api.github.com/repos/Marijnh/CodeMirror | grep size 
% Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 5005 100 5005 0  0 2656  0 0:00:01 0:00:01 --:--:-- 2779 
"size": 28589, 
3

nicht geben die Objektanzahl, aber wenn Sie Verwenden Sie den Google Chrome-Browser und installieren Sie diese extension

Es den Repo-Größe auf der Homepage ergänzt:

GitHub Repo Size extension screenshot