Ich habe ein Repository namens Generic, die eine generische Anwendung ist. Ich habe es in ein Repository namens gegabelt Acmedie nur auf der gespeicherten Anwendung aufbaut Generic -Repository und fügt ihm das Acme Co-Branding hinzu.
Wenn ich Änderungen an der Kernfunktionalität in Genericich möchte die aktualisieren Acme Repository mit den neuesten Änderungen, die ich an der Kernfunktionalität vorgenommen habe, in Generic. Wie würde ich das machen?
Soweit ich das beurteilen kann, versuche ich im Wesentlichen, die in einem Upstream-Repository vorgenommenen Änderungen in den aktuellen Fork einzufügen.
Wenn es irgendetwas bedeutet, versuche ich dies, weil ich eine generische Anwendung habe, auf der ich dann aufbaue und für einzelne Kunden (wie z Acme in diesem Beispiel). Wenn es eine sauberere Möglichkeit gibt, lassen Sie es mich wissen.
McLovin
Geben Sie den folgenden Befehl in Ihrem aus Acme Repo. Es fügt ein neues Remote-Repository mit dem Namen hinzu upstream das deutet auf die hin Generic Repo.
Sie können dann alle vorgenommenen Änderungen zusammenführen Generic in den aktuellen Zweig in Acme mit folgendem Befehl:
git pull upstream
Wenn Sie nur möchten, dass die Änderungen heruntergeladen werden, ohne automatisch zusammenzuführen, verwenden Sie git fetch anstatt git pull.
Wenn Sie das Pushen zu diesem Repository deaktivieren möchten, setzen Sie die Push-URL mit etwas wie auf eine ungültige URL
git config remote.upstream.pushurl "NEVER GONNA GIVE YOU UP"
Git wird Sie jetzt anschreien, dass Sie kein Repo finden können, wenn Sie versuchen, darauf zu pushen upstream (und entschuldigen Sie die Rickroll, aber es war die erste zufällige Saite, die mir in den Sinn kam).
Großartig, danke. Nur noch eine Sache: Gibt es eine Möglichkeit, diese Fernbedienung schreibgeschützt zu machen, damit ich nicht versehentlich darauf drücke?
– Libbux
18. Juli 14 um 3:11 Uhr
Ich fing an zu antworten, aber ich sehe, dass McLovin seine Antwort bereits so bearbeitet hat, dass sie das enthält.
– Frankie Simon
9. März 15 um 13:20 Uhr
Seit Git 2.9 müssen Sie das Flag –allow-unrelated-histories angeben. Siehe stackoverflow.com/a/37938036/3799847
– sfinks_29
26. Oktober 17 um 2:24 Uhr
Ich musste ausstellen git pull --allow-unrelated-histories upstream master
– Alec Jacobson
27. Dezember 17 um 17:32 Uhr
Ich habe das aber versucht git pull upstream hängt einfach … irgendwelche Ideen?
– Paulo Carvalho
4. Februar 19 um 13:53 Uhr
Um einen bestimmten Zweig aus einem anderen Repo zu ziehen, können Sie den folgenden Git-Befehl verwenden.
Wie @vin erwähnt hat, können Sie direkt aus einem anderen Repo ziehen, ohne einen neuen Ursprung hinzuzufügen (unter der Annahme eines Pulls aus einem anderen Repo master Verzweigung zum Lokal master Ast):
Wenn die Commit-Historien der beiden Repos dann nicht verknüpft sind --allow-unrelated-histories wird benötigt, aber verwenden Sie es mit Vorsicht, da es impliziert, dass Sie wissen, was Sie tun.
Du kannst auch push ein lokales Repo zu einem anderen Repo ohne Hinzufügen als Remote (der Remote-Zweig muss nicht vorhanden sein, sodass Sie alles verwenden können, was Sie möchten, z master:new_branch):