Was hilft 'git remote add upstream'?

76

Ich habe weiter gelesen: https://wiki.diasporafoundation.org/Git_workflow#Rebase_your_development_branch_on_the_latest_upstream

Hier ist ein Auszug:

Ihr Repository auf dem neuesten Stand

Um die neuesten Updates vom Entwicklungs-Trunk zu erhalten, führen Sie eine einmalige Einrichtung durch, um das Haupt-GitHub-Repo als Remote einzurichten, indem Sie Folgendes eingeben:

$ git remote add upstream git://github.com/diaspora/diaspora.git

Starten Sie Ihren Entwicklungszweig auf dem neuesten Upstream neu

Um Ihren Entwicklungszweig auf dem neuesten Stand zu halten, müssen Sie Ihre Änderungen zusätzlich zum aktuellen Status des Upstream-Masters neu begründen. Siehe Was ist Git-Rebase? Im folgenden Abschnitt erfahren Sie mehr über das Umbasieren.

Wenn Sie einen Upstream-Zweig wie oben beschrieben und einen Entwicklungszweig namens 100-retweet-bugfix eingerichtet haben, würden Sie den Upstream aktualisieren, Ihren lokalen Master aktualisieren und Ihren Zweig wie folgt neu starten:

$ git fetch upstream

$ git checkout master

$ git rebase upstream/master

$ git checkout 100-retweet-bugfix

[Stellen Sie sicher, dass alles in der Filiale nach Bedarf festgeschrieben ist]

$ git rebase master

Warum muss in diesem Fall ein "Remote-Upstream" hinzugefügt werden? Könnte ich nicht gerade getan haben:

$ git checkout master

$ git pull origin master

$ git checkout 100-retweet-bugfix

[Stellen Sie sicher, dass alles in der Filiale nach Bedarf festgeschrieben ist]

$ git rebase master
ben39
quelle
Sie sollten git remote addnicht git add remote...
Honey

Antworten:

85

Das Wiki spricht aus der Sicht eines gespaltenen Repos. Sie haben die Möglichkeit, vom Ursprung aus zu ziehen und zu schieben. Dies ist Ihre Gabelung für das Haupt-Diaspora-Repo. Um Änderungen von diesem Haupt-Repo zu übernehmen, fügen Sie in Ihrem lokalen Repo eine Fernbedienung "Upstream" hinzu, die auf dieses Original zeigt, und ziehen daraus.

"Origin" ist also ein Klon Ihres Gabel-Repos, aus dem Sie schieben und ziehen. "Upstream" ist ein Name für das Haupt-Repo, von dem aus Sie einen Klon Ihrer Gabel ziehen und auf dem neuesten Stand halten, aber keinen Push-Zugriff darauf haben.

Manojlds
quelle
1
Vielen Dank an @manojlds! Ich habe dann hier eine Folgefrage: link
ben39
16

Dies ist nützlich, wenn Sie eine eigene haben, origindie es nicht ist upstream. Mit anderen Worten, Sie haben möglicherweise Ihr eigenes originRepo, in dem Sie Entwicklungs- und lokale Änderungen vornehmen und dann gelegentlich upstreamÄnderungen zusammenführen. Der Unterschied zwischen Ihrem Beispiel und dem hervorgehobenen Text besteht darin, dass in Ihrem Beispiel davon ausgegangen wird, dass Sie direkt mit einem Klon des Upstream-Repos arbeiten. Der hervorgehobene Text setzt voraus, dass Sie an einem Klon Ihres eigenen Repos arbeiten, der vermutlich ursprünglich ein Klon von Upstream war.

smparkes
quelle
Vielen Dank an @smparkes! es war wirklich hilfreich. Ich habe dann eine Folgefrage hier: link
ben39
4

Ich denke, es könnte zum "rückwirkenden Gabeln" verwendet werden.

Wenn Sie ein Git-Repo haben und jetzt entschieden haben, dass es ein anderes Repo hätte teilen sollen. Rückwirkend möchten Sie, dass es zu einer Gabel wird, ohne das Team, das das Repo verwendet, zu stören, indem Sie es für ein neues Repo benötigen.

Aber ich könnte mich irren.

Onceler
quelle
Welchen Wert bringt diese Antwort, nachdem die Frage vor 5 Jahren beantwortet wurde? Und Sie sind sich immer noch nicht einmal der richtigen Antwort sicher ...
Maciej Jureczko
@MaciejJureczko Ich bin nicht der Einzige, der sich fragt, wie man "rückwirkend gabelt", wenn diese Frage / Antwort bespricht, wie (was ich denke, aber ich bin nicht sicher). Dann könnte diese Frage als Antwort auf andere Fragen verwendet werden. stackoverflow.com/questions/30472771/… ... Wenn dies auf diese Weise rückwirkend gegabelt wird, kann es jetzt mit diesen Suchbegriffen gefunden werden. Es hat eine Weile gedauert, bis ich dachte, dass das Hinzufügen eines Upstream-Repositorys das sein könnte, wonach ich gesucht habe. Wenn OP das einzige Publikum wäre, würden sie keine Fragen von "vor 5 Jahren" archivieren.
Onceler
1

Nehmen wir ein Beispiel: Sie möchten zu Django beitragen, also geben Sie dessen Repository auf. Während Sie an Ihrem Feature arbeiten, wird von anderen Personen viel am Original-Repo gearbeitet. Der Code, den Sie gegabelt haben, ist also nicht der aktuellste. Wenn Sie einen Remote-Upstream einstellen und von Zeit zu Zeit abrufen, wird sichergestellt, dass Ihr gespaltenes Repo mit dem ursprünglichen Repo synchronisiert ist.

Anmol Deep
quelle