So migrieren Sie das GIT-Repository von einem Server auf einen neuen

263

Ich habe einen Server, den ich herunterfahre. Das einzige, was ich noch migrieren muss, ist mein Repository. Dieser Server wird als Ursprung (Master) für eines meiner Projekte aufgeführt. Was ist der richtige Weg, um das Repository zu verschieben, um den Verlauf zu behalten?

cjibo
quelle
Alle Informationen (Ursprung, Trunk usw.) über das Repository werden in einem Ordner mit dem Namen ".git" gespeichert, in dem Sie das Repository initialisieren. So müssen Sie den Inhalt auf den neuen Server kopieren, die Anweisungen unter Verwendung von hier
Mansab Uppal
1
git config remote.origin.url newurl siehe stackoverflow.com/questions/3011402/…
Niels
1
Wenn Sie Ihr Repo und alle Zweige migrieren möchten, verwenden Sie die Antwort von jzwiener oder Roberto anstelle der akzeptierten Antwort.
Jonaglon

Antworten:

246

Um den neuen Repo-Standort hinzuzufügen,

git remote add new_repo_name new_repo_url

Schieben Sie dann den Inhalt an den neuen Speicherort

git push new_repo_name master

Zum Schluss den alten entfernen

git remote rm origin

Danach können Sie das tun, was bdonlan gesagt hat, und die Datei git / config bearbeiten, um den Namen new_repo_name in origin zu ändern. Wenn Sie den Ursprung (ursprüngliches Remote-Repository) nicht entfernen, können Sie einfach Änderungen am neuen Repo mit übertragen

git push new_repo_name master
Koby
quelle
8
Würde dies nur einen einzelnen Zweig aus dem alten Repository in den neuen kopieren?
Andrew Grimm
34
Was ist die Lösung, um alle Zweige zu migrieren?
Emmby
49
Sie sollten in der Lage sein, alle Zweige gleichzeitig über zu schieben git push -u new_repo_name --all.
Rmarscher
10
Die Migration aller Zweige finden Sie unter stackoverflow.com/a/18336145/923599
jzwiener
10
Anstatt die git-config-Datei zu bearbeiten, funktionierte dieser Befehl für mich:git remote rename new_repo_name origin
Salim
210

Wenn Sie alle Zweige und Tags migrieren möchten, sollten Sie die folgenden Befehle verwenden:

git clone --mirror [oldUrl]

das alte Repo mit allen Zweigen zu klonen

cd the_repo
git remote add remoteName newRepoUrl

um eine neue Fernbedienung einzurichten

git push -f --tags remoteName refs/heads/*:refs/heads/*

um alle Refs unter Refs / Köpfe zu schieben (was wahrscheinlich das ist, was Sie wollen)

jzwiener
quelle
5
Git hat sich darüber beschwert --tagsund refs/heads/*:refs/heads/*ist nicht kompatibel mit --mirror. stackoverflow.com/a/26552740/1484831 hat gut funktioniert.
Avigit
3
Ich habe das benutzt und es hat bei mir funktioniert. Wahrscheinlich sollte die gewählte Antwort sein. Beachten Sie, dass der "Code", den Sie lokal erhalten, die Metadaten stark zu belasten scheint, was es für Neulinge unklar macht, ob etwas schief gelaufen ist.
Nick
3
Dies sollte die genehmigte Antwort sein. Viel besser als andere Lösungen
Travis Griggs
15
Am Ende hatte ich alle Zweige in meinem neuen Remote-Repository mit dem Präfix refs/heads/refs/heads, git push -f --tags remoteName refs/heads/*:refs/heads/*also habe ich zugit push remoteName --mirror
dumbledad
1
pushunterstützt auch --mirror. git clone --mirror; cd repo; git push --mirror new_remotesollte den Trick machen
knittl
143

Das hat bei mir einwandfrei funktioniert .

git clone --mirror <URL to my OLD repo location>
cd <New directory where your OLD repo was cloned>
git remote set-url origin <URL to my NEW repo location>
git push -f origin

Ich muss jedoch erwähnen, dass dies einen Spiegel Ihres aktuellen Repos erzeugt und diesen dann an den neuen Ort schiebt. Daher kann dies bei großen Repos oder langsamen Verbindungen einige Zeit dauern .

Roberto
quelle
15
*** Dieser ***
Paul Lockwood
1
Das ist die gute Lösung git remote Set-URL Herkunft <URL zu meinem neuen Repo - Standort> (nach dem alten Ursprung auf den neuen Server / Standort rsync'ed hat)
Toni Homedes i Saun
2
Dieser Woks großartig. Keine verwirrenden Mehrfachfernbedienungen
TaoPR
16
Lieber lieber git push --mirror originals -f.
Aidiakapi
78

Kopieren Sie es über. So einfach ist das wirklich. :) :)

Bearbeiten Sie auf der Clientseite einfach .git / config im lokalen Repo des Clients, um Ihre Fernbedienungen nach Bedarf auf die neue URL zu verweisen.

bdonlan
quelle
6
Sie können es auch einfach klonen. Anstatt die .git / config-Datei direkt zu bearbeiten, können Sie auch git remote rm origin verwenden. git remote add origin <neues Repository>.
ebneter
4
Wenn Sie die Fernbedienung aktivieren, geht jede Konfiguration in diesem Abschnitt der Konfiguration verloren. Wenn Sie sie ohne zusätzliche Schritte klonen, gehen andere Zweige als Trunk verloren. Es ist möglich, mit diesen Problemen umzugehen, aber wirklich - synchronisieren Sie es einfach.
Bdonlan
1
Was ist die Lösung, bei der nur Git für die Arbeit verwendet wird? rsync erfordert zusätzliche administrative Reifen, die schwer zu
durchspringen
2
Dies bewahrt auch zB Hooks und andere Konfigurationen, daher ziehe ich es reinen Git-Lösungen vor
Mnagel
65

Dies geschieht in einigen anderen Antworten teilweise.

git clone --mirror git@oldserver:oldproject.git
cd oldproject.git
git remote add new git@newserver:newproject.git
git push --mirror new
Ian Walters
quelle
6
Dies ist in der Tat die vollständigste und direkteste Antwort.
Lawrence Dol
3
--mirrorim Push ist sehr wichtig: Dies sollte die richtige Antwort sein
PaoloC
Wenn Sie das neue Repository auf dem neuen Server initialisieren, denken Sie daran, eine bloße Initialisierung durchzuführen, da sonst der Push nicht erfolgreich ist:git init --bare
Marco
35

Ich reposte nur, was andere gesagt haben, in einer einfach zu befolgenden Liste von Anweisungen.

  1. Verschieben des Repositorys: Melden Sie sich einfach beim neuen Server cdin dem übergeordneten Verzeichnis an, in dem Sie jetzt das Repository speichern möchten, und rsynckopieren Sie es vom alten Server:

    new.server> rsync -a -v -e ssh [email protected]:path/to/repository.git .
    
  2. Clients auf das neue Repository verweisen lassen: Entfernen Sie nun auf jedem Client, der das Repository verwendet, einfach den Zeiger auf den alten Ursprung und fügen Sie einen zum neuen hinzu.

    client> git remote rm origin
    client> git remote add origin [email protected]:path/to/repository.git
    
Juan A. Navarro
quelle
Einfach und effektiv. Sie können das Flag --bwlimit = XXX hinzufügen, wenn Sie den Datenverkehr zwischen den Servern begrenzen möchten, wobei XXX der Bandbreite in KByte pro Sekunde entspricht.
Greg Glockner
7
Etwas besser als entfernen und hinzufügen:git remote set-url origin [email protected]:path/to/repository.git
Chris KL
Beachten Sie bei der Bereitstellung auf einem Server mit git + capistrano, dass ich den Ursprung der festgelegten URL an zwei Stellen verwenden musste: auf localhost und auf der zwischengespeicherten Kopie auf dem Server.
anandvc
10

Ich habe die Anweisungen auf BitBucket befolgt, um ein Repo mit all seinen Zweigen dorthin zu verschieben. Hier kommen die Schritte mit Erklärungen nach dem #Zeichen:

cd path/to/local/repo
git remote remove origin # to get rid of the old setting, this was not in the BitBucket instructions
git remote add origin ssh://[email protected]/<username>/<newrepo> # modify URL as needed
git push -u origin --all # pushes _ALL_ branches in one go
git push -u origin --tags # pushes _ALL_ tags in one go

Hat gut für mich funktioniert.

Kehlkopf Decidua
quelle
8

Bitte folgen Sie den Schritten:

  • Git Remote Add New-Origin
  • Git Push - alle neuen Ursprünge
  • git push --tags neuer Ursprung
  • git remote rm origin
  • git remote benennt den Ursprung des neuen Ursprungs um
Boush
quelle
5

Dies ist eine Variation dieser Antwort , die derzeit von gitlab vorgeschlagen wird , um ein Git-Repository von einem Server auf einen anderen zu "migrieren".

  1. Nehmen wir an, Ihr altes Projekt wird aufgerufen existing_repound in einem existing_repoOrdner gespeichert .

  2. Erstellen Sie ein Repo auf Ihrem neuen Server. Wir gehen davon aus, dass die URL dieses neuen Projekts lautetgit@newserver:newproject.git

  3. Öffnen Sie eine Befehlszeilenschnittstelle und geben Sie Folgendes ein:

    cd existing_repo
    git remote rename origin old-origin
    git remote add origin git@newserver:newproject.git
    git push -u origin --all
    git push -u origin --tags
    

Der Vorteil dieses Ansatzes besteht darin, dass Sie den Zweig, der Ihrem alten Server entspricht, nicht löschen.

Clément
quelle
4

Sie können den folgenden Befehl verwenden:

git remote set-url --push origin new_repo_url

Beispiel von http://gitref.org/remotes/

$ git remote -v
github  [email protected]:schacon/hw.git (fetch)
github  [email protected]:schacon/hw.git (push)
origin  git://github.com/github/git-reference.git (fetch)
origin  git://github.com/github/git-reference.git (push)
$ git remote set-url --push origin git://github.com/pjhyett/hw.git
$ git remote -v
github  [email protected]:schacon/hw.git (fetch)
github  [email protected]:schacon/hw.git (push)
origin  git://github.com/github/git-reference.git (fetch)
origin  git://github.com/pjhyett/hw.git (push)
mrroboaat
quelle
4

Sollte so einfach sein wie:

git remote set-url origin git://new.url.here

Auf diese Weise behalten Sie den Namen originfür Ihr neues Repo bei und drücken dann das alte Repo auf das neue Repo, wie in den anderen Antworten beschrieben. Angenommen, Sie arbeiten alleine und haben ein lokales Repo, das Sie mit all Ihrer Cruft spiegeln möchten. Sie können dies auch tun (aus Ihrem lokalen Repo heraus).

git push origin --mirror # origin points to your new repo

aber siehe Ist "git push --mirror" ausreichend, um mein Repository zu sichern? (insgesamt --mirrornur einmal verwenden).

Mr_and_Mrs_D
quelle
3

Befolgen Sie diese Anweisungen, wenn Sie alle Commits und Zweige vom alten zum neuen Repo beibehalten möchten

git clone --bare <old-repo-url>
cd <old-repo-directory>
git push --mirror <new-repo-url>
Extrem
quelle
1

Sie können git-copy verwenden , um das Repo mit allen Historien zu duplizieren.

git copy http://a.com/old.git http://a.com/new.git
Quanlong
quelle
1

Wenn Sie von einem Ursprung zu einem anderen wechseln und auch eine Sicherungskopie Ihres aktuellen Ursprungs auf Ihrem lokalen Computer erstellen möchten, können Sie die folgenden Schritte ausführen:

  1. Gehen Sie zunächst lokal zu dem Ordner (git), über den Sie verschieben möchten
  2. Neues Repository online erstellen In diesem Schritt wird ein Repository erstellt, in das Code übertragen werden kann

Jetzt im Ordner tun

git remote get-url origin

Der obige Befehl gibt die aktuelle URL des Remote-Ursprungs an, die nützlich ist, um den Ursprung im letzten Schritt zurückzusetzen

git remote set-url origin [email protected]:folder/newrepo.git

Der obige Befehl setzt den Remote-Ursprung auf den neuen Speicherort

git push --set-upstream origin develop

Mit dem obigen Befehl wird die aktuell aktive lokale Verzweigung mit dem Namen "Verzweigungsname" auf "Remote" verschoben. Natürlich bewahrt es die gesamte Geschichte, da mit git auch die gesamte Geschichte vorangetrieben wird.

git remote set-url origin <original old origin>

Mit dem obigen Befehl wird der Remote-Ursprung auf Ihren aktuellen Ursprung zurückgesetzt: Sie möchten dies, weil Sie sich in Ihrem vorhandenen Ordner befinden und Ihren aktuellen lokalen Ordnernamen wahrscheinlich nicht mit dem neuen Ordner verwechseln möchten, den Sie zum Klonen des Repos erstellen möchten du hast gerade dazu gedrängt.

Hoffe das hilft,

Hace
quelle
0

Wenn Sie ein # Git-Repository von einem Server auf einen neuen migrieren möchten, gehen Sie folgendermaßen vor:

git clone OLD_REPOSITORY_PATH
cd OLD_REPOSITORY_DIR
git remote add NEW_REPOSITORY_ALIAS  NEW_REPOSITORY_PATH
#check out all remote branches 
for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done
git push --mirror NEW_REPOSITORY_PATH
git push NEW_REPOSITORY_ALIAS --tags

Alle entfernten Zweige und Tags aus dem alten Repository werden in das neue Repository kopiert.

Führen Sie diesen Befehl alleine aus:

git push NEW_REPOSITORY_ALIAS

würde nur einen Hauptzweig (nur Nachverfolgungszweige) in das neue Repository kopieren.

maestr0
quelle