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