2011-01-14 2 views
81

Kann jemand einen "Verfolgungszweig" erklären, wie es auf git zutrifft?Git: Was ist ein Tracking-Zweig?

Hier ist die Definition von git-scm.com:

A 'Tracking-Zweig' in Git ist ein lokaler Zweig, der zu einem entfernten Zweig verbunden ist. Wenn Sie auf diesen Zweig drücken und ziehen, schiebt er automatisch und zieht an die entfernte Verzweigung, die es mit verbunden ist.

verwenden, wenn man immer von dem vorgeschalteten Zweig gleichen zieht in den neuen Zweig, und wenn Sie nicht wollen, „git pull“ explizit verwenden.

Leider ist diese Definition absolut neu für mich, weil ich neu bin und von SVN komme.

Ich lese durch "The Pragmatic Guide to Git" (tolles Buch, übrigens), und sie scheinen darauf hinzuweisen, dass Tracking-Filialen eine gute Sache sind und dass nach der Erstellung Ihrer ersten Fernbedienung (Herkunft, in diesem Fall) sollten Sie Richten Sie Ihren Master-Zweig als Tracking-Zweig ein, aber er deckt leider nicht ab, warum ein Tracking-Zweig eine gute Sache ist oder Welche Vorteile erhalten Sie, indem Sie Ihren Master-Zweig als Tracking-Zweig Ihres Ursprungsrepositorys einrichten .

Kann mir bitte jemand aufklären (auf Englisch)?

Antwort

63

Die ProGit book hat a very good explanation:

Tracking-Zweig

eine lokale Niederlassung von einem entfernten Zweig Checking out erstellt automatisch, was für einen Tracking-Zweig genannt wird. Tracking-Zweige sind lokale Zweige, die eine direkte Beziehung zu einer Remote-Zweigstelle haben. Wenn Sie in einem Tracking-Zweig sind und git push eingeben, weiß Git automatisch, an welchen Server und an welchen Zweig Push gesendet werden soll. Wenn Sie git pull ausführen, werden in einem dieser Zweige alle Remoteverweise abgerufen und automatisch in der entsprechenden Remoteverzweigung zusammengeführt.

Wenn Sie ein Repository klonen, wird in der Regel automatisch ein Master-Zweig erstellt, der den Ursprung/Master verfolgt. Deshalb arbeiten Git Push und Git Pull ohne weitere Argumente aus der Box. Sie können jedoch auch andere Nachverfolgungszweige einrichten, die die Zweige nicht nach Ursprung verfolgen und den Hauptzweig nicht verfolgen. Der einfache Fall ist das Beispiel, das Sie gerade gesehen haben und läuft git checkout -b [branch] [remotename]/[branch]. Wenn Sie Git-Version 1.6.2 oder höher haben, können Sie auch die --track Stenografie verwenden:

$ git checkout --track origin/serverfix 
Branch serverfix set up to track remote branch refs/remotes/origin/serverfix. 
Switched to a new branch "serverfix" 

Um einen lokalen Zweig mit einem anderen Namen als dem entfernten Zweig einrichten, können Sie bequem die erste Version mit einer verwenden verschiedener lokaler Zweigname:

$ git checkout -b sf origin/serverfix 
Branch sf set up to track remote branch refs/remotes/origin/serverfix. 
Switched to a new branch "sf" 

nun Ihre lokale Niederlassung sf wird automatisch schieben und von origin/serverfix ziehen.

+12

wollte einfach diese klären: „eine lokale Niederlassung von einem Remote-Checking out Branch erstellt automatisch einen so genannten Tracking-Zweig. " Das ist irreführend. Ohne die Option --track wird kein von Ihnen erstellter Zweig verfolgt. – JohnO

+0

@JohnO, möchte das mit dem Pro Git Typ aufnehmen. Das ganze Buch ist ein Ergebnis der massiven Redaktionsarbeit IIRC. –

24

Die Progit Buch erwähnt:

Tracking-Zweige sind lokale Niederlassungen, die eine direkte Beziehung zu einem entfernten Zweig haben

Nicht ganz. die Frage SO "Having a hard time understanding git-fetch" beinhaltet:

Es gibt kein Konzept der lokale Tracking Filialen, nur Remote-Tracking Filialen.
So origin/master ist ein Remote-Tracking-Zweig für master im origin Repo.

Aber eigentlich, wenn Sie schaffen eine upstream branch relationship zwischen:

  • eine lokale Niederlassung wie master
  • und ein Remote-Tracking-Zweig wie origin/master

Dann sind Sie master als betrachten kann local tracking zweig: es verfolgt die remote t Regale Zweigorigin/master, die wiederum den Master-Zweig der upstream repoorigin verfolgen.

alt text

+0

Bild Erklärung: Mein Computer ist 2 commits vor der Herkunft. Von dort stammen die beiden Commits von Master. Image: http://progit.org/book/ch3-5.html – idbrii

+0

Interpretiere ich richtig: Wenn ich lokal Remotes für den Ursprung und Upstream gesetzt habe, wird mein lokaler Master-Zweig den Ursprung direkt und den Upstream indirekt verfolgen? zB: wenn ich den Status "git" erhalte, erhalte ich eine Commit-Tracking-Nachricht sowohl in Bezug auf den Ursprung als auch auf die Upstream-Repos. (Settup: Ich habe jemandes Repo lokal geklont, meinen Klon in ein neues Repo auf meinem GitHub-Account geschoben und den Ursprung und die Upstream-Remotes lokal auf meinen GitHub-Repo bzw. den geklonten, geklonten Repo gesetzt). – SherylHohman

+3

@SherylHohman Nein: Ein lokaler Zweig wird nichts "direkt" oder "indirekt" verfolgen. Es verfolgt den Remote-Tracking-Zweig, den Sie ihm zuweisen. Im Falle einer Verzweigung empfiehlt es sich, Upstream (das ursprüngliche Repo) für allgemeine Zweige (wie Master) zu verfolgen und den Ursprung (Ihre Remote-Verzweigung) für neue Zweige (Ihre PR- oder Feature-Zweige) zu verfolgen: siehe https: // stackoverflow.com/a/21847690/6309 – VonC

3

Dies war, wie ich ein Tracking-Zweig so habe ich von ihm in meinen neuen Zweig ziehen kann:

git branch --set-upstream-to origin/Development new-branch