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.
@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