Bestehende Git-Zweige zum Verfolgen entfernter Zweige

81

Mein üblicher Workflow bei der Arbeit mit Git ist ungefähr so:

  1. Erstellen Sie ein lokales Repository
  2. Arbeiten Sie in diesem Repository, fügen Sie Dateien hinzu / ändern Sie sie usw.
  3. Entscheiden Sie, dass ich einen zentralen Remotestandort für das Repository haben möchte, und erstellen Sie einen
  4. Übertragen Sie alle Commits von meinem lokalen Repository in dieses neue Remote-Repository

Jetzt möchte ich jedoch in der Lage sein, dieses Remote-Repository zu pushund pullvon diesem zu entfernen, ohne angeben zu müssen, wohin ich drücke oder von wo ich ziehe. Ich möchte, dass mein lokaler Master den Remote-Master verfolgt.

Der richtige Weg, dies zu tun, ist mir nicht klar, und ich konnte es nicht aus der Dokumentation ermitteln, obwohl es eigentlich nicht mehr als ein Befehl sein sollte.

Da dies nur einmal pro Repository durchgeführt wird, habe ich im Allgemeinen eine von zwei einfachen, aber hackigen Lösungen verwendet:

  1. wird verwendet git clone, um ein neues lokales Repository zu erstellen und das alte zu löschen. Nach dem Klonen von Git wird das neue Repository eingerichtet, um den Ursprung zu verfolgen.
  2. manuell bearbeitetes .git / config, um den Master-Track-Ursprung herzustellen.

Ich denke, ich sollte in der Lage sein, einen Befehl auszuführen, wahrscheinlich eine Form, git remoteum ein vorhandenes Repository so einzurichten, dass der Master einen Remote-Master verfolgt. Kann mir jemand sagen, was dieser Befehl ist?

SpoonMeiser
quelle
Tatsächlich stellt sich heraus, dass eine ähnliche Frage schon einmal gestellt wurde: stackoverflow.com/questions/312055/…
SpoonMeiser
Für die Git-Version> = 1.7.0.0 können Sie dies in einem Befehl tun, der hier erklärt wird .
KiRPiCH
4
Dies ist eigentlich ein Duplikat von: stackoverflow.com/questions/520650/…
Takeshin

Antworten:

153

Verwenden Sie das Setup-Upstream-Argument:

git branch --set-upstream local-branch-name origin/remote-branch-name

Wenn Sie den obigen Befehl ausführen, wird Ihre .git / config-Datei korrekt aktualisiert und sogar mit dieser Ausgabe überprüft:

"Branch-Local-Branch-Name eingerichtet, um den Remote-Branch-Remote-Branch-Namen vom Ursprung zu verfolgen."

EDIT: Wie Martijn sagte: "In Version Git v1.8.0 ist --set-upstream veraltet. Verwenden Sie stattdessen --set-upstream-to."

git branch --set-upstream-to local-branch-name origin/remote-branch-name

Sehen Sie diese für weitere Informationen.

Jorge
quelle
18
In der Version Git v1.8.0 --set-upstreamist veraltet. Verwenden Sie --set-upstream-tostattdessen.
Martijn
1
Verwenden Sie, um git remote show <remote>zu sehen, welche Zweige von Ihren lokalen Zweigen verfolgt werden
naitsirch
1
Diese vorgeschlagene Bearbeitung hätte nicht genehmigt werden dürfen, sondern die Antwort grundlegend geändert (und in einem falschen Zustand belassen, da die Argumente für die neue Option umgekehrt sind). Lassen Sie das Originalplakat entscheiden, ob er seine Antwort aktualisieren möchte oder nicht.
1
Sie können den Zweig auch erneut mitgit push -u
mattr-
Richten Sie set upstreamdie Zuordnungen nicht ein, ohne tatsächlich Code aufzurufen? push zwingt Sie, Code zu pushen, um Zuordnungen zu erstellen. Vielleicht haben Sie noch keinen Code, möchten aber eine Zuordnung erstellen?
user20358
19

git help remotesollte Ihnen zeigen, was Sie wissen müssen. Ich denke was du willst ist

git remote add [remote-name] [remote-url]

# Set a local branch to follow the remote
git config branch.[branch-name].remote [remote-name]

# Set it to automatically merge with a specific remote branch when you pull
git config branch.[branch-name].merge [remote-master]

Sie können .git / config auch manuell bearbeiten, um diese einzurichten.

Mike Pape
quelle
Eine andere Möglichkeit besteht darin, Ihr zentrales Repository zu erstellen, dann Ihr Arbeitsverzeichnis zu löschen und es durch Klonen aus dem zentralen Repository neu zu erstellen. Das Bearbeiten von .git / config ist jedoch informativer.
William Pursell
Das Klonen des zentralen Repositorys und das Bearbeiten von .git / config sind die beiden Optionen, die ich bereits in meiner Frage erwähnt habe.
SpoonMeiser
7

Sie können dies auch verwenden, wenn Sie einen neuen lokalen Zweig erstellen möchten, um einen Remote-Zweig zu verfolgen:

git checkout --track -b [branch_name] --track origin[or other remote name]/[remote_branch_name] 

oder noch besser:

git checkout -t origin/branch_name
bcolfer
quelle
git checkout --track -b branchname origin branchname name fatal: git checkout: Das Aktualisieren von Pfaden ist nicht mit dem Wechseln von Zweigen kompatibel. Wollten Sie 'origin / branchname' auschecken, was nicht als Commit aufgelöst werden kann?
edebill
6

Auf neueren Versionen von Git können Sie verwenden

git branch --track origin/branch_name
fazineroso
quelle
4
Dieser Beitrag wird automatisch als minderwertig gekennzeichnet, da er so kurz / nur Code ist. Würde es Ihnen etwas ausmachen, es durch Hinzufügen von Text zu erweitern, um zu erklären, wie es das Problem löst?
Gung - Reinstate Monica
Dies ist die genaueste Antwort! Alle oben genannten sind nicht falsch oder werden nicht mehr unterstütztgit branch --set-upstream BRANCH fatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.
GTodorov
3

The --set-upstream flag is deprecated and will be removed.

git branch master --set-upstream-to myupstream/master

Denis C.
quelle
1

Drei Jahre später (siehe was ich dort gemacht habe :-)) habe ich versucht, mit Git Bash einen nicht verfolgten Zweig zu ziehen und habe ihn erhalten

If you wish to set tracking information for this branch you can do so with:

git branch --set-upstream-to=origin/<branch> develop

Folgendes hat erreicht, was ich brauchte:

$ git branch --set-upstream-to=origin/develop develop Branch 'develop' set up to track remote branch 'develop' from 'origin'.

MikeA
quelle
-1

Verwenden Sie diesen Befehl:

git clone [<options>] [--] <repo> [<dir>]
RidhaHleli
quelle
Hallo, vielleicht möchten Sie die Frage erneut lesen - es wird erwähnt, dass das Repository erneut geklont wird, aber die Frage bezieht sich darauf, wann das lokale Repository zuerst erstellt wurde und die Fernbedienung zunächst nicht verfolgt wurde.
SpoonMeiser