2013-07-11 14 views
14

Ich wundere mich, dass git clone --verbose ist nicht sehr ausführlich. Der Ausgang von der Ausführung des Befehls ist die folgende:Git Klon ausführlicher Modus - Zeige jedes eingehende Objekt

$ git clone --verbose <repo> 
remote: Counting objects: 184, done 
remote: Finding sources: 100% (184/184) 
remote: Total 184 (delta 66), reused 183 (delta 66) 
Receiving objects: 100% (184/184), 18.90 KiB, done. 
Resolving deltas: 100% (66/66), done. 

Das erwartete Verhalten ist die Liste der empfangenen Objekte eins nach dem anderen zu sehen. Ist das mit einigen anderen Optionen möglich?

+0

Fun Tatsache - wenn 'git' in der Tat berichten hat jedes Objekt one-by -eine, wie Sie vorschlagen, dann ein 'Git-Klon 'des Linux-Kernel-Repository würde weit über 2 Millionen Zeilen Ausgabe produzieren. Wahrscheinlich ein guter Grund, dass es nicht auf diese Weise implementiert ist ... Wenn Sie diese Informationen wirklich wollen, können Sie versuchen, 'git rev-list --objects --all' ... – twalberg

+0

Ich sehe, wissen Sie, ist das" git rev- list --objects --all "die gleiche Reihenfolge der Objekte bereitstellen, die" git clone "für" Receiving objects "ist? Ich brauche das, weil ich manchmal den Netzwerkfehler bekomme, wenn ich eines der Objekte erhalte, und ich möchte genau dieses Objekt in der Struktur fidn. – erkfel

+0

Ich wäre sehr überrascht, wenn Ihr "Netzwerkfehler" in irgendeiner Weise mit einem bestimmten Objekt verbunden wäre, das gerade über einen TCP-Socket übertragen wird. Die Reihenfolge ist wahrscheinlich nicht die gleiche, da 'git' eine Paketdatei generiert und sendet, die die angeforderten Objekte enthält, und die Auftragsobjekte in einer Paketdatei platziert werden, kann etwas willkürlich erscheinen. – twalberg

Antwort

13

Es ist nicht möglich, Objekte (Dateien, Commits, Blobs, was auch immer) eins nach dem anderen aufzulisten, weil git sie aus Effizienzgründen in einer einzigen Datei packt. Aus dem gleichen Grund wird beim Kopieren nur ein versteckter Ordner .git angezeigt. Dateien werden nur erstellt, wenn die vollständige Paketdatei heruntergeladen wurde.

Wenn Sie sich wundern, werden diese Pack-Dateien unter dem Namen tmp_pack_XXXXXX unter .git/objects/pack/ heruntergeladen. (später wird es in etwas wie pack-*.pack mit einem verwandten pack-*.idx Datei umbenannt)

0

Ich akzeptiere @ Lekensteyn Antwort.

Wenn Sie git remote-Befehle verfolgen möchten, fügen Sie dem Terminal die folgenden Umgebungsvariablen hinzu. Dies hilft Ihnen, einen Blick hinter die Kulissen eines Git-Befehls zu werfen.

export GIT_TRACE_PACKET=1 
export GIT_TRACE=1 
export GIT_CURL_VERBOSE=1 

Referenz: https://git-scm.com/book/en/v2/Git-Internals-Environment-Variables

Probe Cloning Ergebnis nach dem Export enter image description here

enter image description here

enter image description here enter image description here