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:
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