Git-Tutorial: Synchronisation (Teil 2: git fetch)

In dieser Tutorial-Reihe beschäftigen wir uns mit der Zusammenarbeit zwischen Entwicklern in einem Git-basierten Projekt: Zunächst geht es darum, Repositories zu synchronisieren. Nachdem beschrieben wurde, wie mit git remote Verbindungen zwischen Repos eingerichtet werden können, sollen nun mit git fetch Commits importiert werden.

git fetch

Der Befehl git fetch importiert Commits von einem Remote-Repository in das lokale Repo. Diese Commits werden als Remote-Branches statt als normale lokale Branches gespeichert. Das bietet Entwicklern die Möglichkeit, Änderungen zu reviewen, ehe sie sie in die eigenen Kopien des Projekts integrieren.

Nutzung

git fetch <remote>

Fetcht alle Branches aus dem Repository. Damit werden auch alle benötigten Commits und Dateien von dem anderen Repo heruntergeladen.

git fetch <remote> <branch>

Fetcht nur den unter <branch> spezifizierten Branch.

Anmerkungen

Fetching ist die geeignete Methode, um einzusehen, woran andere gearbeitet haben. Da auf diese Weise importierte Inhalte von Remote-Branches repräsentiert werden, haben sie absolut keinen Effekt auf die lokale Entwicklungsarbeit. Damit ist das Fetching ein sicherer Weg, Commits zu reviewen, ehe sie in das lokale Repository integriert werden. Es entspricht insofern dem Befehl svn update, dass man sehen kann, wie sich das zentrale Repo weiterentwickelt hat, doch der Entwickler ist nicht gezwungen, die Änderungen direkt in sein Repository zu mergen.

Remote-Branches
Remote-Branches sind wie lokale Branches, außer dass sie Commits aus einem Repository repräsentieren, das jemand anderem gehört. Remote-Branches können wie lokale Branches ausgecheckt werden, allerdings in einen abgetrennten HEAD-Status (wie beim Auschecken eines alten Commits). Am besten stellt man sie sich wie Read-only-Branches vor. Um Remote-Branches zu sehen, muss der Befehl git branch nur mit der Option -r genutzt werden. Remote-Branches sind mit entsprechenden Präfixen versehen, die anzeigen, wozu sie gehören. Nach dem Fetchen vom original-Remote könnte ein Entwickler z.B. die folgenden Branches sehen:

git branch -r
# origin/master
# origin/develop
# origin/some-feature

Diese Branches können auch mit den normalen Befehlen git checkout und git log inspiziert werden. Bestätigt der Entwickler die Änderungen, die ein Remote-Branch enthält, kann er ihn mit dem normalen git merge in einen lokalen Branch mergen. Anders als bei SVN, ist die Synchronisation mit einem Remote-Repository also tatsächlich ein zweistufiger Prozess: fetchen, dann mergen. Der Befehl git pull bietet hier eine bequeme Abkürzung. (Mehr dazu im nächsten Tutorial.)

Beispiele

In diesem Beispiel wird ein typischer Workflow durchlaufen, um ein lokales Repository mit dem master-Branch des zentralen Repos zu synchronisieren.

git fetch origin

Dadurch werden die heruntergeladenen Branches angezeigt:

a1e8fb5..45e66a4 master -> origin/master
a1e8fb5..9e8ab1c develop -> origin/develop
* [new branch] some-feature -> origin/some-feature

Die Commits aus diesen neuen Remote-Branches werden unten als Quadrate und nicht als Kreise dargestellt. Wie man sieht, bietet git fetch Zugriff auf die komplette Branch-Struktur eines anderen Repos.

Um zu sehen, welche Commits zum Upstream-master hinzugefügt wurden, kann git log mit origin/master als Filter ausgeführt werden:

git log --oneline master..origin/master

Um die Änderungen zu bestätigen und in den lokalen master-Branch zu mergen, kann der Entwickler die folgenden Kommandos ausführen:

git checkout master
git log origin/master

Dann kann er git merge origin/master nutzen:

git merge origin/master

Die Branches origin/master und master zeigen nun auf denselben Commit, die Synchronisation mit der Upstream-Entwicklung ist durchgeführt.

Im nächsten Tutorial kommen wir dann zum Befehl git pull.

Weiterführende Infos: Ihr Partner für Git und Stash

Kennen Sie Stash, Atlassians Git-Repository-Managementsystem? Stash bietet eine zentrale Lösung zum Management des gesamten distributierten Codes: Hier kommen alle Git-Repositories im Unternehmen zusammen, hier finden Entwickler immer die letzte offizielle Version eines Projekts, hier können Projektverantwortliche Berechtigungen kontrollieren, um sicherzustellen, dass die richtigen Nutzer Zugriff auf den richtigen Code haben.

Möchten Sie mehr erfahren? Wir sind offizieller Vertriebspartner von Atlassian und einer der größten Atlassian Experts Partner weltweit. Gerne unterstützen wir Sie bei der Evaluierung, Lizenzierung und Adaption von Stash. Und wenn Sie Atlassian-Lizenzen bei //SEIBERT/MEDIA kaufen, gewähren wir Ihnen einen Rabatt in Höhe von 10% der Lizenzkosten in Form von Beratungsleistungen. Bitte sprechen Sie uns einfach an.

99 Argumente für Stash als Git-Repository-Manager
Branch-basierte Git-Workflows mit Stash adaptieren
Echte Integration: Das Zusammenspiel von JIRA, Stash und Bamboo
Interview: Die Vorteile von Git in der Software-Entwicklung und die Möglichkeiten von Stash
So funktioniert die Lizenzierung von Atlassian-Produkten