web-dev-qa-db-fra.com

Comment migrer le référentiel GIT d'un serveur à un autre

J'ai un serveur que je décroche. La seule chose qui me reste à migrer est mon référentiel. Ce serveur est répertorié en tant qu'origine (maître) pour l'un de mes projets. Quelle est la bonne façon de déplacer le référentiel pour conserver l'historique.

235
cjibo

Pour ajouter le nouvel emplacement de dépôt, 

git remote add new_repo_name new_repo_url

Puis poussez le contenu vers le nouvel emplacement

git Push new_repo_name master

Enlevez enfin l'ancien

git remote rm Origin

Après cela, vous pouvez faire ce que bdonlan a dit et éditer le fichier.git/config pour changer le nouveau nom_repo en Origin. Si vous ne supprimez pas l’Origine (référentiel distant d'origine), vous pouvez simplement envoyer les modifications au nouveau référentiel avec 

git Push new_repo_name master
235
Koby

Si vous souhaitez migrer toutes les branches et les balises, vous devez utiliser les commandes suivantes:

git clone --mirror [oldUrl]

cloner le vieux repo avec toutes les branches

cd the_repo
git remote add remoteName newRepoUrl

installer une nouvelle télécommande

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

poussez toutes les références sous les références/têtes (ce qui est probablement ce que vous voulez)

174
jzwiener

Cela a fonctionné pour moiparfaitement

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

Je dois mentionner cependant que cela crée un miroir de votre dépôt actuel et le pousse ensuite vers le nouvel emplacement. Par conséquent, cela peut prendre un certain temps pour les gros dépôts ou les connexions lentes .

109
Roberto

Copiez-le. C'est vraiment aussi simple que cela. :)

Côté client, modifiez simplement .git/config dans le référentiel local du client pour faire pointer vos télécommandes vers la nouvelle URL si nécessaire.

76
bdonlan

Cela se fait en partie dans certaines des autres réponses.

git clone --mirror git@oldserver:oldproject.git
cd oldproject.git
git remote add new git@newserver:newproject.git
git Push --mirror new
44
Ian Walters

Je ne fais que republier ce que d'autres ont dit, dans une liste d'instructions simple à suivre.

  1. Déplacez le référentiel: Connectez-vous simplement au nouveau serveur, cd au répertoire parent où vous souhaitez maintenant stocker le référentiel, et utilisez rsync pour copier à partir de l'ancien serveur:

    new.server> rsync -a -v -e ssh [email protected]:path/to/repository.git .
    
  2. Faites que les clients pointent vers le nouveau référentiel: Maintenant, sur chaque client utilisant le référentiel, il suffit de supprimer le pointeur sur l’origine et d’en ajouter un au nouveau.

    client> git remote rm Origin
    client> git remote add Origin [email protected]:path/to/repository.git
    
33
Juan A. Navarro

Jetez un coup d’œil à cette recette sur GitHub: https://help.github.com/articles/importing-an-external-git-repository }

J'ai essayé plusieurs méthodes avant de découvrir git Push --mirror.

Travaillé comme un charme!

15
John Smith

J'ai suivi les instructions sur BitBucket pour déplacer un référentiel avec toutes ses branches. Voici les étapes avec les explications suivant le caractère #:

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

A bien fonctionné pour moi.

10
Laryx Decidua

S'il vous plaît suivez les étapes:

  • git remote add new-Origin 
  • git Push - toute nouvelle origine
  • git Push - étiquettes new-Origin
  • git remote rm Origine
  • git remote renommer nouvelle origine
6
Boush

Vous pouvez utiliser la commande suivante: 

git remote set-url --Push Origin new_repo_url

Exemple tiré de 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)
4
mrroboaat

Devrait être aussi simple que:

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

De cette façon, vous gardez le nom Origin pour votre nouveau référentiel - puis appuyez sur le nouveau référentiel, comme indiqué dans les autres réponses. Supposons que vous travailliez seul et que vous souhaitiez reproduire tout ce que vous aviez à faire avec une prise en pension locale, vous pourriez aussi bien (à partir de votre prise en charge locale)

git Push Origin --mirror # Origin points to your new repo

mais voir "git Push --mirror" est-il suffisant pour sauvegarder mon référentiel? (dans tous n'utilisez pas --mirror mais une fois).

4
Mr_and_Mrs_D

Vous pouvez utiliser git-copy pour dupliquer le référentiel avec tous les historiques.

git copy http://a.com/old.git http://a.com/new.git
2
Quanlong

suivez ces instructions si vous voulez conserver tous les commits et branches d'ancien à nouveau repo

git clone --bare <old-repo-url>
cd <old-repo-directory>
git Push --mirror <new-repo-url>
2
Extreme

Ceci est une variante de cette réponse , actuellement suggérée par gitlab pour "migrer" un dépôt git d’un serveur à un autre.

  1. Supposons que votre ancien projet s'appelle existing_repo, stocké dans un dossier existing repo.

  2. Créez un dépôt sur votre nouveau serveur. Nous supposerons que l'URL de ce nouveau projet est git@newserver:newproject.git

  3. Ouvrez une interface de ligne de commande et entrez les informations suivantes:

    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
    

L'avantage de cette approche est que vous ne supprimez pas la branche qui correspond à votre ancien serveur.

1
Clément

Si vous souhaitez migrer un référentiel #git d'un serveur à un autre, vous pouvez le faire comme suit:

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

Toutes les branches distantes et les balises de l'ancien référentiel seront copiées dans le nouveau référentiel.

Exécuter cette commande seule:

git Push NEW_REPOSITORY_ALIAS

copierait uniquement une branche principale (uniquement les branches de suivi) dans le nouveau référentiel.

0
maestr0

Si vous souhaitez passer d'une origine à une autre et conserver également une sauvegarde de votre origine actuelle sur votre ordinateur local, procédez comme suit:

  1. Tout d'abord, allez localement dans le dossier (git) que vous souhaitez déplacer.
  2. Créer le nouveau référentiel en ligne Cette étape crée un référentiel dans lequel nous pouvons envoyer du code à

Maintenant dans le dossier faire

git remote get-url Origin

La commande ci-dessus donne l'URL d'origine distante actuelle, utile pour définir l'origine à la dernière étape.

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

La commande ci-dessus définit l'origine distante sur le nouvel emplacement.

git Push --set-upstream Origin develop

La commande ci-dessus pousse la branche locale active actuelle vers la zone distante avec le développement de la branche. Bien sûr, cela préserve toute l'histoire comme avec git, toute l'histoire est également poussée.

git remote set-url Origin <original old Origin>

La commande ci-dessus ramène l'origine d'origine à votre origine actuelle: vous le souhaitez car vous êtes dans votre dossier existant et vous ne voulez probablement pas mélanger votre nom de dossier local actuel avec le nouveau dossier que vous allez créer pour cloner le référentiel vous venez de pousser à.

J'espère que cela t'aides,

0
Hace