92 votes

Comment remplacer un sous-module git par un autre repo?

Comment puis-je remplacer un git sous-module avec un autre repo git?

Plus précisément, j'ai un sous-module:

  • situé à l' ./ExternalFrameworks/TestFramework qui pointe vers un repo git git@github.com:userA/TestFramework.git
  • J'aimerais à présent le point de git@github.com:userB/TestFramework.git.

Le problème est que lorsque je supprime le sous-module avec la méthode décrite ici, puis ajouter de nouveau à l'aide de la commande

git submodule add git@github.com:userB/TestFramework.git

J'obtiens cette erreur:

A git directory for 'ExternalFrameworks/TestFramework' is found locally with remote(s):
  origin    git@github.com:userA/TestFramework.git
If you want to reuse this local git directory instead of cloning again from
  git@github.com:userB/TestFramework.git
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.

115voto

Tim Henigan Points 19948

Si l'emplacement (URL) de la sous-module a changé, alors il vous suffit de:

  1. Modifier votre .gitmodule le fichier à utiliser la nouvelle URL
  2. Exécutez git submodule sync

Plus complète d'informations peuvent être trouvées ailleurs:

33voto

joseph.hainline Points 3254

Tout d'abord, supprimer le courant sous-module avec la méthode déjà mentionné ici, dont je suis, y compris pour des raisons de commodité:

  • Supprimer la section pertinente de l' .gitmodules le fichier
  • Supprimer la section pertinente de .git/config
  • Exécutez git rm --cached path_to_submodule (n slash)
  • S'engager et de supprimer le maintenant sans traces sous-module fichiers

Maintenant, ajouter la nouvelle sous-module avec l' --name drapeau. Cela donnera git un autre nom à la référence, en .git/config pour le sous-module, à deconflict avec le sous-module qui a été là depuis longtemps, qui vous voulez continuer à travailler dans votre avant l'histoire.

Tapez donc:

git submodule add --name UpdatedTestFramework git@github.com:userB/TestFramework.git

et vous obtiendrez le sous-module chargé dans le chemin que vous attendez.

2voto

DerZyklop Points 105

Le moyen le plus simple que j'ai trouvé est le suivant:

git rm -rf [submodule_dir] git submodule add --name new_[submodule_name] [new_submodule_url] [submodule_dir]

Je n’ai pas aimé l’idée de modifier mes .gitmodules manuellement. J'ai aussi écrit un petit article de blog à ce sujet.

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