Ich habe 'git push --all -u newremote' verwendet, aber es werden nur die ausgecheckten Zweige auf newremote übertragen.
Git: Alle Zweige auf eine neue Remote verschieben
von Keith Dechant , Software-Architekt
Hier ist ein Szenario, das einige von Ihnen vielleicht schon mit Ihren Git Repositories begegnet sein. Sie haben eine Arbeitskopie eines Git-Repositories, beispielsweise von einem alten Server. Aber Sie haben nur die Arbeitskopie, und der Ursprung ist nicht zugänglich. Sie können es also nicht einfach forken. Sie wollen aber die gesamte Projektarchiv und die gesamte Historie der Verzweigung auf Ihren neuen Server übertragen.
Dies ist möglich, wenn Ihre Arbeitskopie die Verfolgungszweige enthält aus dem alten Remote-Zweig enthält (origin/branch1, origin/branch1, etc.). Wenn Sie das tun, haben Sie das gesamte Repo und die Historie.
In meinem Fall gab es jedoch Dutzende von Filialen, und einige oder alle davon die ich noch nie vor Ort überprüft hatte. Sie alle anzusteuern schien eine schwere Aufgabe. Wie sollte man also vorgehen?
Ich habe zwei Optionen identifiziert:
Option 1: Jeden Zweig überprüfen und pushen Ich könnte dies tun, und ich könnte sogar ein sogar ein Bash-Skript schreiben, das dabei hilft. Allerdings würde dies bei jedem Checkout meine Arbeitsdateien bei jedem Auschecken ändern und einen lokalen Zweig für für jeden der entfernten Verzweigungen erstellen. Dies wäre bei einer großen Repo.
Option 2: Push ohne Änderung der Arbeitskopie Es gibt eine zweite Alternative, die kein Auschecken der einzelnen Zweige erfordert, keine fremde Zweige in der Arbeitskopie erzeugt und nicht einmal die die Dateien in der Arbeitskopie verändert.
Wenn Ihre alte, nicht mehr aktive Fernbedienung "oldremote" heißt und Ihre neue Fernbedienung "newremote" heißt, können Sie nur die entfernten Verfolgungszweige mit diesem Befehl pushen:
git push newremote refs/remotes/oldremote/*:refs/heads/*
In einigen Fällen ist es auch möglich, nur eine Teilmenge der Zweige zu verschieben. Wenn die Namen der Zweige mit einem Schrägstrich versehen sind (z.B., oldremote/features/branch3, oldremote/features/branch4, usw.), können Sie nur die entfernten Verfolgungszweige pushen, deren Namen mit "oldremote/features" beginnen:
git push newremote refs/remotes/oldremote/features/*:refs/heads/features/*
Ob Sie alle Zweige oder nur einige von ihnen pushen, führt Git den Git führt den gesamten Vorgang durch, ohne neue lokale Zweige zu erstellen und ohne Änderungen an Ihren Arbeitsdateien vorzunehmen. Jeder Tracking-Zweig, der Ihrem Muster entspricht, wird in den neuen entfernten Zweig verschoben.
Weitere Informationen zu diesem Thema finden Sie in diesem Thread auf Stack Überlauf.
Datum der Veröffentlichung: Oktober 9, 2017
5 Stimmen
"und versucht zu ziehen, aber es funktioniert nicht". Details bitte. Zeigen Sie uns, welchen Befehl Sie versucht haben zu verwenden.