2010-07-27 2 views
32

Ich versuche ein tieferes Verständnis von Git zu bekommen.Was bedeutet die Ausgabe von Git Pull eigentlich?

Kann mir jemand eine einfache Zeile-für-Zeile-Erklärung geben, welche grundlegende git pull Ausgabe bedeutet? Beispiel:

remote: Counting objects: 11, done. 
remote: Compressing objects: 100% (5/5), done. 
remote: Total 7 (delta 2), reused 0 (delta 0) 
Unpacking objects: 100% (7/7), done. 
From ssh://my.remote.host.com/~/git/myproject 
* branch   master  -> FETCH_HEAD 
Updating 9d447d2..f74fb21 
Fast forward 
app/controllers/myproject_controller.rb | 13 +++++++++++++ 
1 files changed, 13 insertions(+), 0 deletions(-) 

Antwort

51

Unter der Haube git pull wird git fetch von git merge gefolgt. Hier ist der Fetch-Teil:

remote: Counting objects: 11, done. 
remote: Compressing objects: 100% (5/5), done. 
remote: Total 7 (delta 2), reused 0 (delta 0) 

An dieser Stelle haben Sie der Fernbedienung gesagt, was Sie wollen. Es findet alle Objekte, die es Ihnen geben muss (ich zähle sie dabei), komprimiert sie für eine schnellere Übertragung über das Netzwerk und meldet dann, was es Ihnen sendet. Objekte können Blobs, Bäume, Commits oder Tags sein - siehe zum Beispiel die git book für weitere Informationen.

Sie erhalten das Paket (Satz von komprimierten Objekten) und entpacken es.

From ssh://my.remote.host.com/~/git/myproject 
* branch   master  -> FETCH_HEAD 

Sie haben den Zweig 'Master' von der angegebenen Fernbedienung abgerufen. der ref FETCH_HEAD zeigt nun darauf. Jetzt gehen wir zum Merge über - genau, git wird FETCH_HEAD (den Master-Zweig der Fernbedienung) in Ihren aktuellen Zweig (vermutlich Master) einbinden.

Updating 9d447d2..f74fb21 
Fast forward 

Es stellt sich heraus, dass Sie nicht von der Master-Zweig des entfernten abwich haben, so dass die Zusammenführung ist eine Vorspulen (triviale merge, wo es Sie vorwärts in der Geschichte einfach bewegt). Git notiert die ursprüngliche Position Ihres Master-Zweiges (9d447d2) und die neue Position (f74fb21), zu der es weitergeleitet wurde. Wenn Sie vom Master-Zweig des Remote-Rechners abgewichen wären, würden Sie hier die Ausgabe einer rekursiven Zusammenführung sehen - Merge made by recursive, möglicherweise zusammen mit einigen Auto-merged <file> und (oh nein!) Zusammenführungskonflikten!

app/controllers/myproject_controller.rb | 13 +++++++++++++ 
1 files changed, 13 insertions(+), 0 deletions(-) 

Schließlich zeigt es Ihnen die Diffstat zwischen der ursprünglichen und Post-Merge-Position Ihres Master-Zweigs; Das ist im Grunde, was Sie von git diff --stat [email protected]{1} master erhalten würden.

+0

+1 "Es stellt sich heraus, dass Sie nicht vom Master-Zweig der Fernbedienung abgewichen sind" - Sie meinen, dass kein neuer Zweig erstellt wurde? Auch was bedeutet ++ oder - –

+1

@Pangea und andere, die sich vielleicht in der Zukunft wundern: Nein, es bedeutet nicht, dass kein neuer Zweig erstellt wurde, es bedeutet einfach, dass Sie nicht gleichzeitig Änderungen begangen haben, die nicht waren noch in der Remote-Filiale enthalten. In diesem Fall gibt es nichts zu verschmelzen, Sie fügen einfach die neuen Commits über Ihrem lokalen Zweig hinzu und sowohl Ihr lokaler Zweig als auch der entfernte Zweig sind identisch. ++ und - sind einfach "grafische" Repräsentationen der Anzahl der Änderungen in jeder Datei (+ werden Insertionen und -'s werden gelöscht) und sagen Ihnen somit ungefähr, wohin die meisten Änderungen gingen. – tne

Verwandte Themen