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.
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
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)
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 .
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.
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
Je ne fais que republier ce que d'autres ont dit, dans une liste d'instructions simple à suivre.
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 .
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
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!
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.
S'il vous plaît suivez les étapes:
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)
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).
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
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>
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.
Supposons que votre ancien projet s'appelle existing_repo
, stocké dans un dossier existing repo
.
Créez un dépôt sur votre nouveau serveur. Nous supposerons que l'URL de ce nouveau projet est git@newserver:newproject.git
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.
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.
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:
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,