Ho un server che sto smontando. L'unica cosa che mi rimane da migrare è il mio repository. Questo server è elencato come origine (master) per uno dei miei progetti. Qual è il modo corretto di spostare il repository per conservare la cronologia.
Ho un server che sto smontando. L'unica cosa che mi rimane da migrare è il mio repository. Questo server è elencato come origine (master) per uno dei miei progetti. Qual è il modo corretto di spostare il repository per conservare la cronologia.
Risposte:
Per aggiungere la nuova posizione del repository,
git remote add new_repo_name new_repo_url
Quindi spingere il contenuto nella nuova posizione
git push new_repo_name master
Finalmente rimuovi quello vecchio
git remote rm origin
Dopodiché puoi fare quello che ha detto bdonlan e modificare il file.git / config per cambiare il nome_nome_punto in origine. Se non si rimuove l'origine (repository remoto originale), è possibile semplicemente inviare le modifiche al nuovo repository con
git push new_repo_name master
git push -u new_repo_name --all
.
git remote rename new_repo_name origin
Se desideri migrare tutti i rami e i tag, dovresti usare i seguenti comandi:
git clone --mirror [oldUrl]
clonare il vecchio repository con tutti i rami
cd the_repo
git remote add remoteName newRepoUrl
per configurare un nuovo telecomando
git push -f --tags remoteName refs/heads/*:refs/heads/*
spingere tutti i ref sotto ref / head (che è probabilmente quello che vuoi)
--tags
e refs/heads/*:refs/heads/*
non è compatibile con --mirror
. stackoverflow.com/a/26552740/1484831 ha funzionato bene.
refs/heads/refs/heads
con prefisso usando git push -f --tags remoteName refs/heads/*:refs/heads/*
quindi ho cambiato agit push remoteName --mirror
push
supporta anche --mirror
. git clone --mirror; cd repo; git push --mirror new_remote
dovrebbe fare il trucco
Questo ha funzionato perfettamente per me .
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
Devo dire però che questo crea un mirror del tuo repository corrente e quindi lo spinge nella nuova posizione. Pertanto, ciò può richiedere del tempo per repository di grandi dimensioni o connessioni lente .
git push --mirror origin
finita -f
.
Copialo sopra. È davvero così semplice. :)
Sul lato client, basta modificare .git / config nel repository locale del client per indirizzare i telecomandi al nuovo URL, se necessario.
Questo è fatto in parte in alcune delle altre risposte.
git clone --mirror git@oldserver:oldproject.git
cd oldproject.git
git remote add new git@newserver:newproject.git
git push --mirror new
--mirror
nella spinta è molto importante: questa dovrebbe essere la risposta corretta
git init --bare
Sto solo ripubblicando quello che altri hanno detto, in un semplice elenco di istruzioni da seguire.
Spostare il repository: è sufficiente accedere al nuovo server, cd
alla directory principale in cui si desidera ora conservare il repository e utilizzare rsync
per copiare dal vecchio server:
new.server> rsync -a -v -e ssh user@old.server.com:path/to/repository.git .
Fai in modo che i client puntino al nuovo repository: ora su ogni client che utilizza il repository, basta rimuovere il puntatore alla vecchia origine e aggiungerne uno a quello nuovo.
client> git remote rm origin
client> git remote add origin user@new.server.com:path/to/repository.git
git remote set-url origin user@new.server.com:path/to/repository.git
Dai un'occhiata a questa ricetta su GitHub: https://help.github.com/articles/importing-an-external-git-repository
Ho provato diversi metodi prima di scoprirlo git push --mirror
.
Ha funzionato come un fascino!
git clone --mirror ...
, git remote add ...
,git push --mirror ...
Ho seguito le istruzioni su BitBucket per spostare un repository con tutti i suoi rami lì. Ecco i passaggi con spiegazioni che seguono il #
personaggio:
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://git@bitbucket.org/<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
Ha funzionato bene per me.
Questa è una variante di questa risposta , attualmente suggerita da gitlab per "migrare" un repository git da un server all'altro.
Supponiamo che il tuo vecchio progetto venga chiamato existing_repo
, archiviato in una existing_repo
cartella.
Crea un repository sul tuo nuovo server. Supponiamo che l'URL di quel nuovo progetto siagit@newserver:newproject.git
Apri un'interfaccia della riga di comando e inserisci quanto segue:
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
I vantaggi di questo approccio è che non si elimina il ramo che corrisponde al vecchio server.
Puoi usare il seguente comando:
git remote set-url --push origin new_repo_url
Esempio da http://gitref.org/remotes/
$ git remote -v
github git@github.com:schacon/hw.git (fetch)
github git@github.com: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 git@github.com:schacon/hw.git (fetch)
github git@github.com:schacon/hw.git (push)
origin git://github.com/github/git-reference.git (fetch)
origin git://github.com/pjhyett/hw.git (push)
Dovrebbe essere semplice come:
git remote set-url origin git://new.url.here
In questo modo conservate il nome origin
per il vostro nuovo repository, quindi inviate al nuovo repository quello vecchio come indicato nelle altre risposte. Supponendo che tu lavori da solo e che tu abbia un repository locale che vuoi rispecchiare con tutta la tua cruft al suo interno, potresti anche (dall'interno del tuo repository locale)
git push origin --mirror # origin points to your new repo
ma vedi "git push --mirror" è sufficiente per eseguire il backup del mio repository? (in tutto non usare --mirror
ma una volta).
Se si desidera passare da un'origine all'altra e mantenere anche un backup dell'origine corrente sul computer locale, è possibile utilizzare questi passaggi:
Ora nella cartella fai
git remote get-url origin
Il comando precedente fornisce l'URL di origine remoto corrente, utile per riportare l'origine nell'ultimo passaggio
git remote set-url origin git@github.newlocation:folder/newrepo.git
Il comando sopra imposta l'origine remota nella nuova posizione
git push --set-upstream origin develop
Il comando sopra invia il ramo locale attivo corrente al remoto con sviluppo nome ramo. Ovviamente conserva tutta la storia poiché con git viene spinta anche tutta la storia.
git remote set-url origin <original old origin>
Il comando sopra riporta l'origine remota alla tua origine corrente: lo vuoi perché sei nella cartella esistente e probabilmente non vuoi mescolare il nome della cartella locale corrente con la nuova cartella che creerai per clonare il repository hai appena spinto.
Spero che questo ti aiuti,
Se vuoi migrare un repository #git da un server a uno nuovo puoi farlo in questo modo:
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
Tutti i rami remoti e i tag dal vecchio repository verranno copiati nel nuovo repository.
Eseguendo questo comando da solo:
git push NEW_REPOSITORY_ALIAS
copierebbe solo un ramo principale (solo rami di tracciamento) nel nuovo repository.