164 votes

Comment déplacer un dépôt git vers un autre répertoire et faire de ce répertoire un dépôt git?

J'ai un répertoire gitrepo1. Ce répertoire est un dépôt git.

  • Je voudrais déplacer ce gitrepo1 dans un autre répertoire newrepo.

  • Le répertoire newrepo devrait être le nouveau dépôt git sans perte de l'historique git et devrait contenir le répertoire gitrepo1.

  • Le répertoire gitrepo1 devrait simplement être un répertoire maintenant (à l'intérieur de newrepo), sans aucun index .git, c'est-à-dire qu'il ne devrait plus être un dépôt git indépendant ou un sous-module.

Comment puis-je faire cela?

165voto

Shahbaz Points 22525

C'est très simple. Git se moque du nom de son répertoire. Il se préoccupe seulement de ce qu'il y a à l'intérieur. Donc vous pouvez simplement faire:

# copier le répertoire dans le nouveau répertoire newrepo qui existe déjà (sinon le créer)
$ cp -r gitrepo1 newrepo

# supprimer .git du vieux dépôt pour supprimer tout l'historique et tout ce qui concerne git
$ rm -rf gitrepo1/.git

Notez que la copie est assez coûteuse si le dépôt est volumineux et avec un long historique. Vous pouvez aussi l'éviter facilement:

# déplacer le répertoire à la place
$ mv gitrepo1 newrepo

# faire une copie de la dernière version
# Soit:
$ mkdir gitrepo1; cp -r newrepo/* gitrepo1/  # ne copie pas .gitignore (et d'autres fichiers cachés)

# Soit:
$ git clone --depth 1 newrepo gitrepo1; rm -rf gitrepo1/.git

# Soit (regardez plus loin ici: http://stackoverflow.com/q/1209999/912144)
$ git archive --format=tar --remote= HEAD | tar xf -

Une fois que vous avez créé newrepo, la destination pour mettre gitrepo1 pourrait être n'importe où, même à l'intérieur de newrepo si vous le souhaitez. Cela ne change pas la procédure, seulement le chemin que vous écrivez pour récupérer gitrepo1.

38voto

david.pfx Points 5594

C'est encore plus simple que ça. Il suffit de faire ceci (sous Windows, mais cela devrait fonctionner sur d'autres OS) :

  1. Créer newrepo.
  2. Déplacer gitrepo1 dans newrepo.
  3. Déplacer .git de gitrepo1 vers newrepo (d'un niveau vers le haut).
  4. Valider les modifications (corriger le suivi si nécessaire).

Git voit simplement que vous avez ajouté un répertoire et renommé plusieurs fichiers. Pas de problème.

10voto

Je ne suis pas un expert, mais je copie le dossier .git dans un nouveau dossier, puis j'invoque : git reset --hard

7voto

emremrah Points 1093

Pour faire cela sans aucun problème:

  1. Vérifiez quelle est la branche actuelle dans le gitrepo1 avec git status, disons la branche "development".
  2. Changez de répertoire vers le nouveaurepo, puis git clone le projet depuis le dépôt.
  3. Passez à la branche dans nouveaurepo précédente : git checkout development.
  4. Synchronisez nouveaurepo avec l'ancien, gitrepo1 en utilisant rsync, en excluant le dossier .git : rsync -azv --exclude '.git' gitrepo1 nouveaurepo/gitrepo1. Vous n'êtes pas obligé de le faire avec rsync bien sûr, mais cela se fait si facilement.

L'avantage:

Vous êtes prêt à continuer exactement là où vous vous êtes arrêté : votre ancienne branche, les changements non validés, etc.

0voto

Manière simple de déplacer un dépôt git dans un autre répertoire et de faire de ce répertoire un dépôt git en utilisant la méthode de clonage en miroir

git clone --mirror git@example.com/mirror-repository.git

cd mirror-repository.git

pousser les changements vers le nouveau dépôt en utilisant la commande ci-dessous

git push --mirror git@example.com/new-mirror.git

Cela va récupérer toutes les branches et les tags disponibles dans le dépôt miroir et les répliquera dans le nouvel emplacement.

Ne pas utiliser git push --mirror dans des dépôts qui n'ont pas été clonés avec --mirror. Cela écrasera le dépôt distant avec vos références locales (et vos branches locales). git clone --mirror est préféré à git clone --bare car le premier clone également les notes git et quelques autres attributs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X