J'ai un serveur que j'arrête. La seule chose qu'il me reste à migrer est mon référentiel. Ce serveur est répertorié comme 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.
J'ai un serveur que j'arrête. La seule chose qu'il me reste à migrer est mon référentiel. Ce serveur est répertorié comme 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.
Réponses:
Pour ajouter le nouvel emplacement du référentiel,
git remote add new_repo_name new_repo_url
Poussez ensuite le contenu vers le nouvel emplacement
git push new_repo_name master
Enfin, retirez 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 new_repo_name en origin. Si vous ne supprimez pas l'origine (référentiel distant d'origine), vous pouvez simplement pousser les modifications dans le nouveau référentiel avec
git push new_repo_name master
git push -u new_repo_name --all
.
git remote rename new_repo_name origin
Si vous souhaitez migrer toutes les branches et balises, vous devez utiliser les commandes suivantes:
git clone --mirror [oldUrl]
cloner l'ancien dépôt avec toutes les branches
cd the_repo
git remote add remoteName newRepoUrl
configurer une nouvelle télécommande
git push -f --tags remoteName refs/heads/*:refs/heads/*
pour pousser toutes les références sous les références / têtes (ce qui est probablement ce que vous voulez)
--tags
et refs/heads/*:refs/heads/*
n'est pas compatible avec --mirror
. stackoverflow.com/a/26552740/1484831 a bien fonctionné.
refs/heads/refs/heads
utilisant le préfixe, git push -f --tags remoteName refs/heads/*:refs/heads/*
donc je suis git push remoteName --mirror
push
prend également en charge --mirror
. git clone --mirror; cd repo; git push --mirror new_remote
devrait faire l'affaire
Cela a fonctionné parfaitement pour moi .
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 cependant mentionner que cela crée un miroir de votre référentiel actuel, puis le pousse vers le nouvel emplacement. Par conséquent, cela peut prendre un certain temps pour les grands référentiels ou les connexions lentes .
git push --mirror origin
plutôt -f
.
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 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
--mirror
dans la poussée est très important: ce devrait être la bonne réponse
git init --bare
Je republie simplement ce que les autres ont dit, dans une liste d'instructions simple à suivre.
Déplacer le référentiel: Connectez -vous simplement au nouveau serveur, cd
dans le répertoire parent où vous souhaitez maintenant conserver le référentiel, et utilisez rsync
pour copier à partir de l'ancien serveur:
new.server> rsync -a -v -e ssh user@old.server.com:path/to/repository.git .
Faire pointer les clients vers le nouveau référentiel: Maintenant, sur chaque client utilisant le référentiel, supprimez simplement le pointeur sur l'ancienne origine et ajoutez-en un au nouveau.
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
Jetez un œil à cette recette sur GitHub: https://help.github.com/articles/importing-an-external-git-repository
J'ai essayé un certain nombre de méthodes avant de découvrir git push --mirror
.
A fonctionné comme un charme!
git clone --mirror ...
, git remote add ...
,git push --mirror ...
J'ai suivi les instructions sur BitBucket pour déplacer un dépôt avec toutes ses branches là-bas. Voici les étapes avec des explications suivant le #
personnage:
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
A bien fonctionné pour moi.
Il s'agit d'une variante de cette réponse , actuellement suggérée par gitlab pour "migrer" un référentiel git d'un serveur à un autre.
Supposons que votre ancien projet soit appelé existing_repo
, stocké dans un existing_repo
dossier.
Créez un dépôt sur votre nouveau serveur. Nous supposerons que l'url de ce nouveau projet estgit@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
Les avantages de cette approche sont que vous ne supprimez pas la branche qui correspond à votre ancien serveur.
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 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)
Devrait être aussi simple que:
git remote set-url origin git://new.url.here
De cette façon, vous gardez le nom origin
de votre nouveau référentiel - puis poussez vers le nouveau référentiel l'ancien comme détaillé dans les autres réponses. Supposons que vous travailliez seul et que vous ayez un dépôt local que vous souhaitez refléter avec toute votre cruauté, vous pourriez aussi bien (de l'intérieur de votre dépôt local)
git push origin --mirror # origin points to your new repo
mais voir "git push --mirror" est-il suffisant pour sauvegarder mon référentiel? (en tout, ne l'utilisez --mirror
qu'une seule fois).
Si vous souhaitez passer d'une origine à une autre et également conserver une sauvegarde de votre origine actuelle sur votre ordinateur local, vous pouvez utiliser ces étapes:
Maintenant, dans le dossier,
git remote get-url origin
La commande ci-dessus donne l'url d'origine d'origine à distance, utile pour rétablir l'origine à la dernière étape
git remote set-url origin git@github.newlocation: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 à distance avec développer le nom de la branche. Bien sûr, il préserve toute l'histoire car avec git, toute l'histoire est également poussée.
git remote set-url origin <original old origin>
La commande ci-dessus rétablit l'origine distante à votre origine actuelle: vous le voulez parce que 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,
Si vous souhaitez migrer un référentiel #git d'un serveur vers un nouveau, vous pouvez le faire comme ceci:
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 et balises distantes de l'ancien référentiel seront copiées dans le nouveau référentiel.
Exécution de cette commande seule:
git push NEW_REPOSITORY_ALIAS
copiera uniquement une branche principale (uniquement les branches de suivi) dans le nouveau référentiel.