Git-Tutorial: Synchronisation (Teil 3: git pull)

In dieser Tutorial-Reihe beschäftigen wir uns mit der Zusammenarbeit zwischen Entwicklern in einem Git-basierten Projekt: Als erstes geht es darum, Repositories zu synchronisieren. Zunächst wurde beschrieben, wie mit git remote Verbindungen zwischen Repos eingerichtet werden können und wie sich mit git fetch Commits importieren lassen. Nun geht es um das Mergen von Upstream-Änderungen in ein lokales Repository. Wie im letzten Tutorial gezeigt, geht das mit git fetch gefolgt von git merge. git pull verkürzt diesen Prozess auf ein einzelnes Kommando.

Nutzung

git pull <remote>

Fetcht die spezifizierte Remote-Kopie des aktuellen Branchs und mergt sie direkt in die lokale Kopie. Das entspricht git fetch <remote> gefolgt von git merge origin/<current-branch>.

git pull --rebase <remote>

Dasselbe wie oben, aber statt git merge für die Integration des Remote-Branchs mit dem lokalen Branch zu nutzen, wird git rebase angewendet.

Anmerkungen

git pull kann man sich als die Git-Version von svn update vorstellen. Der Befehl bietet einen einfachen Weg, um ein lokales Repository mit Upstream-Änderungen zu synchronisieren. Das folgende Diagramm erläutert die Schritte des Pulling-Prozesses:

Git Pull 1

git pull 2

git pull 3

Zunächst denkt der Entwickler, sein Repo wäre synchronisiert, doch git fetch enthüllt, dass die origin-Version des master-Branchs seit dem letzten Check weiter fortgeschritten ist. Dann integriert git merge den remote master sofort in den lokalen Branch.

Pull vs. Rebase

Die Option --rebase kann genutzt werden, um eine lineare History sicherzustellen, indem unnötige Merge-Commits vermieden werden. Viele Entwickler ziehen das Rebasing dem Merging vor. Damit setzen sie ihre Änderungen quasi an die Spitze aller bisher vorgenommenen Änderungen durch andere. In diesem Sinne entspricht git pull mit der --rebase-Option dem Befehl svn update noch viel eher als ein reines git pull.

Tatsächlich ist das Pullen mit --rebase ein so gebräuchlicher Workflow, dass es eine dedizierte Konfigurationsoption dafür gibt:

git config --global branch.autosetuprebase always

Nach dem Ausführen dieses Befehls werden alle git pull-Befehle Änderungen via git rebase statt mit git merge integriert.

Beispiel

Das folgende Beispiel demonstriert eine Synchronisation mit dem master-Branch des zentralen Repos:

git checkout master
git pull --rebase origin

Dies setzt die lokalen Änderungen einfach an die Spitze all dessen, was andere beigetragen haben.

Das nächste Tutorial widmet sich dann dem Befehl git push.

Git und Stash effektiv und produktiv nutzen? Wir sind Ihr Partner!

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.

Übrigens: //SEIBERT/MEDIA bietet auch professionelle Grundlagen- und Aufbau-Workshops zu Git und Atlassian Stash an.

Weiterführende Infos

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