Git ziehen aus einem anderen Repository

94

Ich habe ein Repository namens Generic, das eine generische Anwendung ist. Ich habe es in ein Repository namens gegabelt Acme, das nur auf dem in der Anwendung gespeicherten GenericRepository aufbaut und das Acme Co-Branding hinzufügt.

Wenn ich Änderungen an der Kernfunktionalität in vornehme Generic, möchte ich das AcmeRepository mit den neuesten Änderungen aktualisieren, die ich an der Kernfunktionalität in vorgenommen habe Generic. Wie würde ich das machen?

Soweit ich das beurteilen kann, versuche ich im Wesentlichen, die in einem Upstream-Repository vorgenommenen Änderungen in der aktuellen Abzweigung zusammenzuführen.

Wenn es etwas bedeutet, versuche ich dies zu tun, weil ich eine generische Anwendung habe, auf der ich dann aufbaue und die ich für einzelne Kunden brandmarken kann (wie Acmein diesem Beispiel). Wenn es einen saubereren Weg gibt, lassen Sie es mich wissen.

Libbux
quelle

Antworten:

133

Geben Sie den folgenden Befehl in Ihrem AcmeRepo ein. Es wird ein neues Remote-Repository mit dem Namen upstreamhinzugefügt, das auf das GenericRepo verweist .

git remote add upstream https://location/of/generic.git

Mit dem folgenden Befehl können Sie dann alle Änderungen, die an Genericder aktuellen Verzweigung vorgenommen wurden, zusammenführen Acme:

git pull upstream

Wenn Sie nur möchten, dass die Änderungen heruntergeladen werden, ohne sie automatisch zusammenzuführen, verwenden Sie git fetchstattdessen anstelle von git pull.

Wenn Sie das Pushing in dieses Repository deaktivieren möchten, setzen Sie die Push-URL mit etwas wie einer ungültigen URL

git config remote.upstream.pushurl "NEVER GONNA GIVE YOU UP"

Git wird dich jetzt anschreien, dass du kein Repo finden kannst, wenn du versuchst zu pushen upstream(und es tut mir leid wegen der Rickroll, aber es war die erste zufällige Zeichenfolge, die mir in den Sinn kam).

McLovin
quelle
6
Großartig, danke. Nur eine andere Sache: Gibt es eine Möglichkeit, diese Fernbedienung schreibgeschützt zu machen, damit ich nicht versehentlich darauf drücke?
Libbux
1
Ich fing an zu antworten, aber ich sehe, dass McLovin seine Antwort bereits so bearbeitet hat, dass sie das enthält.
Frankie Simon
4
Seit Git 2.9 müssen Sie das Flag --allow-non-related-histories angeben. Siehe stackoverflow.com/a/37938036/3799847
sfinks_29
5
Ich musste ausstellengit pull --allow-unrelated-histories upstream master
Alec Jacobson
Ich habe das versucht, aber git pull upstreamhängt einfach ... irgendwelche Ideen?
Paulo Carvalho
6

Um einen bestimmten Zweig aus einem anderen Repo zu ziehen, können Sie den folgenden Befehl git verwenden.

git pull <git_url> <branch> --allow-unrelated-histories
vin
quelle