git ready

Lerne Git Commit für Commit
von Nick Quaranto, Übersetzung von Nico Gulden

Remote-tracking Branches

eingetragen am 09 Mar 2009

Verwirrt darüber, was genau remote-tracking Branches sind? Keine Sorge, es geht nicht nur dir so. Es gibt grundsätzlich zwei Arten von Branches: lokal und remote-tracking. Lokale Branches sind alltäglich. Sie sind einfach ein anderer Pfad im DAG, in den man einchecken kann. Remote-tracking Branches haben ein paar andere Absichten:

  1. Sie werden dazu verwendet, um die lokale Arbeit mit der Arbeit in einem entfernten Repository zu verbinden.
  2. Sie wissen automatisch, von welchem entfernten Branch Änderungen heruntergeladen werden müssen, wenn git pull oder git fetch verwendet werden.
  3. Und noch besser, git status erkennt, wieviele Commits die aktuelle Arbeit der entfernten Version des Branches voraus ist.

Glücklicherweise gibt der git branch Befehl Einblick darin, welcher Branch was ist. Bei frisch geklonten Repositories ist für gewöhnlich folgende Ausgabe zu sehen:

$ git branch
* master

Das zeigt nur den üblichen lokalen Branch, den Master. Für die entfernten Branches ist folgender Befehl nötig:

$ git branch -r
  origin/HEAD
  origin/master

Und wenn schließlich alle Branches angezeigt werden sollen:

$ git branch -a
* master
  origin/HEAD
  origin/master

Sobald Branches mit der --track Option erstellt werden, sind sie als Verbindung zum Remote Branch konfiguriert. Möchte man zum Beispiel einen neuen Branch vom Master Branch aus dem origin Repository erzeugen, würde das in diesem Fall einen Branch ergeben, der automatisch mit dem entfernen Branch verbunden ist und von dem so direkt die Commits geladen werden können:

$ git branch --track feature1 origin/master
Branch feature1 set up to track remote branch refs/remotes/origin/master.

Von hier aus kann man den Branch mit git checkout auswählen und damit arbeiten. Und weil der entfernte Branch verfolgt wird, weiß Git, wo die Änderungen bei einem Fetch oder Pull eingebracht werden müssen.

Lokale Branches können auch von jedem beliebigen Startpunkt erzeugt werden, sei es ein remote-tracking Branch oder jede andere übergebene treeish Option. Hier sind ein paar Beispiele:

$ git branch --no-track feature2 origin/master 
$ git branch --no-track feature3 HEAD~4
$ git branch --no-track feature4 f21e886

In diesen Beispielen wurde die Option --no-track übergeben. Damit wird sichergestellt, dass die Branches nicht von einem remote-tracking Branch abgeleitet werden. Man kann diese Verhaltensweise in der Datei ~/.gitconfig einstellen. Wie das Git Cheat Sheet hierzu sagt:

git config branch.autosetupmerge true
tells git-branch and git-checkout to setup new branches so that git-pull(1)
will appropriately merge from that remote branch. Recommended. Without this,
you will have to add —track to your branch command or manually merge remote
tracking branches with “fetch” and then “merge”.

Dieser Beitrag löste hoffentlich die Verwirrung um Branches und was genau remote-tracking Branches machen ein wenig auf. Wenn du weitere Ideen für bessere Erklärungen oder vergleichbare Ressourcen hast, teile sie uns in den Kommentaren mit oder schicke uns einen Tip!