Was ist ein Tracking-Zweig?

173

Kann jemand einen "Tracking-Zweig" erklären, wie er für Git gilt?

Hier ist die Definition von git-scm.com :

Ein 'Tracking-Zweig' in Git ist ein lokaler Zweig, der mit einem Remote-Zweig verbunden ist. Wenn Sie diesen Zweig drücken und ziehen, wird er automatisch an den Remote-Zweig gedrückt und gezogen, mit dem er verbunden ist.

Verwenden Sie diese Option, wenn Sie immer von demselben Upstream-Zweig in den neuen Zweig ziehen und "git pull" nicht explizit verwenden möchten.

Leider macht diese Definition für mich absolut keinen Sinn, da ich neu in Git bin und von SVN komme.

Ich lese gerade " The Pragmatic Guide to Git " (übrigens ein großartiges Buch) durch und sie scheinen darauf hinzudeuten, dass das Verfolgen von Zweigen eine gute Sache ist und dass Sie dies nach dem Erstellen Ihrer ersten Fernbedienung (in diesem Fall Ursprung) tun sollten Richten Sie Ihren Hauptzweig als Tracking-Zweig ein, aber es wird leider nicht behandelt, warum ein Tracking-Zweig eine gute Sache ist oder welche Vorteile Sie erhalten, wenn Sie Ihren Master-Zweig als Tracking-Zweig Ihres Ursprungs-Repositorys einrichten .

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

Jerhinesmith
quelle
6
Eine Terminologie Anmerkung: das Wort Spur , in Git ist sehr schlecht überlastet. Einige Dateien werden nachverfolgt, andere nicht nachverfolgt . Einige Filialnamen werden als Remote-Tracking-Filialen bezeichnet. Mit dieser --trackOption können Sie einen (lokalen) Zweig erstellen, für den einer dieser Fernverfolgungszweige als Upstream festgelegt ist . Die Terminologie hat sich zwischen 2006 und 2019 etwas weiterentwickelt, so dass unterschiedliche Personen manchmal mit jedem dieser Wörter etwas anderes meinen können .
Torek
Ich persönlich empfehle die Phrase mit Namen Fernverfolgung anstelle von Fernverfolgung Äste , teilweise, weil das Wort Zweig auch eher überlastet. Die Remote-Tracking - Namen sind diejenigen , die aussehen wie origin/master: sie in Ihrem Repository sind, aber sie sind Ihre Git Weg des Erinnerns Zweig Namen wie in einigen gesehen andere über im Git - Repository origin. Wenn Sie dann das Wort stromaufwärts , die der moderneren Begriff ist, zu sagen , dass Sie masterhat origin/masterals gesetzt Upstream , können Sie all diese Terminologie Verwirrung vermeiden.
Torek

Antworten:

141

Das ProGit-Buch hat eine sehr gute Erklärung :

Verfolgen von Zweigen

Durch das Auschecken eines lokalen Zweigs aus einem Remote-Zweig wird automatisch ein sogenannter Tracking-Zweig erstellt. Tracking-Zweige sind lokale Zweige, die eine direkte Beziehung zu einem Remote-Zweig haben. Wenn Sie sich in einem Tracking-Zweig befinden und diesen eingeben git push, weiß Git automatisch, auf welchen Server und Zweig Sie pushen müssen. Wenn Sie git pullin einem dieser Zweige ausgeführt werden, werden alle Remote-Referenzen abgerufen und dann automatisch in den entsprechenden Remote-Zweig eingefügt.

Wenn Sie ein Repository klonen, wird im Allgemeinen automatisch ein Master-Zweig erstellt, der den Ursprung / Master verfolgt. Das ist der Grund git pushund git pullfunktioniert ohne weitere Argumente. Sie können jedoch auch andere Verfolgungszweige einrichten, wenn Sie dies wünschen - solche, die keine Zweige am Ursprung verfolgen und den Hauptzweig nicht verfolgen. Der einfache Fall ist das Beispiel, das Sie gerade gesehen haben git checkout -b [branch] [remotename]/[branch]. Wenn Sie Git Version 1.6.2 oder höher haben, können Sie auch die --trackKurzform 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 den Remote-Zweig einzurichten, können Sie problemlos die erste Version mit einem anderen lokalen Zweignamen verwenden:

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

Jetzt wird Ihre lokale Niederlassung sfautomatisch zu und von dort ziehen origin/serverfix.

BONUS: zusätzliche git statusInformationen

Mit einem Tracking-Zweig git statuserfahren Sie, wie weit Sie hinter Ihrem Tracking-Zweig zurückliegen - nützlich, um Sie daran zu erinnern, dass Sie Ihre Änderungen noch nicht vorgenommen haben! Es sieht aus wie das:

$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

oder

$ git status
On branch dev
Your branch and 'origin/dev' have diverged,
and have 3 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Assaf Lavie
quelle
21
Ich wollte dies nur klären: "Wenn Sie einen lokalen Zweig von einem Remote-Zweig auschecken, wird automatisch ein sogenannter Tracking-Zweig erstellt." Das ist irreführend. Ohne die Option --track wird kein von Ihnen erstellter Zweig verfolgt.
JohnO
@ JohnO, möchte das vielleicht mit dem Pro Git-Typ aufnehmen. Das ganze Buch ist das Ergebnis einer massiven Redaktionskooperation IIRC.
Assaf Lavie
2
@ JohnO, laut: sbf5.com/~cduan/technical/git/git-4.shtml --track ist standardmäßig aktiviert und daher nicht erforderlich.
Hank Lin
50

Im Folgenden finden Sie meine persönlichen Lernnotizen zu GIT-Tracking-Zweigen. Hoffentlich ist dies für zukünftige Besucher hilfreich:

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein


Tracking von Zweigen und "Git Fetch":

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Hagrawal
quelle
Danke für die Notizen! Würde es Ihnen etwas ausmachen, sie alle zu teilen, wenn dies möglich ist? Vielen Dank;
Aditya
@Aditya: Diese Frage dient zum Verfolgen von Zweigen und ich habe alle meine Notizen zu diesem Thema veröffentlicht. Wenn ich eine andere relevante Frage finde, in der ich meine anderen GIT-Notizen veröffentlichen kann, werde ich dies gerne tun.
Hagrawal
Vielen Dank! Was ich damit meinte war, sie auf deinem Blog zu veröffentlichen oder so :). Nochmals vielen Dank für nette Notizen!
Aditya
@ Aditya: Ah, ich verstehe. Jetzt ist dir klar, was du meinst. Ich bin auf meiner Website im Rückstand, habe aber noch keine für mich erstellt.
Hagrawal
43

Das Pro Git-Buch erwähnt :

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

Nicht genau. Die SO-Frage " Schwer zu verstehengit-fetch " beinhaltet:

Es gibt kein solches Konzept für lokale Verfolgungszweige , nur Fernverfolgungszweige .
So origin/masterist ein Remote-Tracking-Zweig für masterim originRepo.

Aber tatsächlich, sobald Sie eine vorgelagerte Verzweigungsbeziehung hergestellt haben zwischen:

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

Dann können Sie masterals lokaler Tracking-Zweig betrachten : Er verfolgt den Remote-Tracking-Zweig origin/master , der wiederum den Hauptzweig des Upstream-Repos verfolgt origin .

Alt-Text

VonC
quelle
Bildklärung: Mein Computer ist 2 Commits vor dem Ursprung. Von dort kommen diese beiden Verpflichtungen des Meisters. Bild: progit.org/book/ch3-5.html
idbrii
Interpretiere ich richtig: Wenn ich lokal Fernbedienungen für Ursprung und Upstream eingestellt habe, verfolgt mein lokaler Hauptzweig den Ursprung direkt und indirekt Upstream? Beispiel: Wann git statuserhalte ich eine Commit-Tracking-Nachricht in Bezug auf Origin- und Upstream-Repos? (Einrichtung: Ich habe das Repo einer Person lokal geklont, meinen Klon auf ein neues Repo in meinem GitHub-Konto verschoben und den Ursprung und die Upstream-Fernbedienungen lokal für mein Github-Repo bzw. das geklonte geklonte Repo festgelegt.)
SherylHohman
3
@SherylHohman Nein: Eine lokale Niederlassung verfolgt nichts "direkt" oder "indirekt". Es verfolgt den Remote-Tracking-Zweig, den Sie ihm zuweisen. Im Falle einer Gabelung empfiehlt es sich, den Upstream (das ursprüngliche Repo) für allgemeine Zweige (wie Master) und den Ursprung (Ihre Remote-Gabel) für neue Zweige (Ihre PR- oder Feature-Zweige) zu verfolgen
VonC
2
@VonC - Die Aussage "Es gibt kein solches Konzept für lokale Verfolgungszweige, nur Fernverfolgungszweige." ist interessant b / c gibt es solche widersprüchliche Terminologie um Zweige. Dieser häufig referenzierte Link web.archive.org/web/20130419172453/http://www.gitguys.com/… unterscheidet zwischen "Tracking-Zweigen" und "Remote-Tracking-Zweigen". Sie nennen origin / master einen "Remote Tracking Branch" - da stimme ich zu - aber dann nennen sie "master" auch einen "Tracking Branch". Was ist Master Tracking? Sind sie falsch oder handelt es sich um ein Terminologieproblem?
Howiecamp
2
@Howiecamp, was sie einen "Tracking-Zweig namens Master" nennen, ist einfach ein lokaler Zweig-Master mit einem zugeordneten Ursprung / Master der Remote-Tracking-Verzweigung, um den letzten vom Ursprung abgerufenen SHA1 in Bezug auf seinen Remote-Master-Zweig zu speichern. Es ist also eine "Abkürzung" für die Bezeichnung "einer lokalen Niederlassung mit einer vorgelagerten Niederlassung"
VonC
7

Auf diese Weise habe ich einen Tracking-Zweig hinzugefügt, damit ich ihn in meinen neuen Zweig ziehen kann:

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