web-dev-qa-db-fra.com

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

Comment remplacer un sous-module git par un autre dépôt git?

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

  • situé à ./ExternalFrameworks/TestFramework qui pointe vers un dépôt Git [email protected]:userA/TestFramework.git
  • Je voudrais qu'il pointe maintenant sur [email protected]:userB/TestFramework.git.

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

git submodule add [email protected]:userB/TestFramework.git

Je reçois cette erreur:

A git directory for 'ExternalFrameworks/TestFramework' is found locally with remote(s):
  Origin    [email protected]:userA/TestFramework.git
If you want to reuse this local git directory instead of cloning again from
  [email protected]: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.
86
joseph.hainline

Si l'emplacement (URL) du sous-module a changé, vous pouvez simplement:

  1. Modifiez votre .gitmodule fichier à utiliser la nouvelle URL
  2. Supprimer le dossier de sous-module dans le référentiel rm -rf .git/modules/<submodule>
  3. Supprimer le dossier du sous-module dans le répertoire de travail rm -rf <submodule>
  4. Courir git submodule sync
  5. Courir git submodule update

Des informations plus complètes peuvent être trouvées ailleurs:

109
Tim Henigan

Tout d’abord, supprimez le sous-module actuel avec la méthode déjà mentionnée ici , que j’inclus par commodité:

  • Supprimer la section correspondante de la .gitmodules fichier
  • Supprimer la section correspondante de .git/config
  • Courir git rm --cached path_to_submodule _ (pas de barre oblique)
  • Valider et supprimer les fichiers de sous-module maintenant non suivis

Maintenant, ajoutez le nouveau sous-module avec le --name drapeau. Cela donnera à git un autre nom à référencer dans .git/config pour le sous-module, résoudre le conflit avec le sous-module qui existait auparavant, que vous souhaitez toujours utiliser dans votre historique précédent.

Alors tapez:

git submodule add --name UpdatedTestFramework [email protected]:userB/TestFramework.git

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

32
joseph.hainline

Ces commandes effectueront le travail sur la commande Invite sans modifier aucun fichier du référentiel local.

git config --file=.gitmodules submodule.Submod.url https://github.com/username/ABC.git
git config --file=.gitmodules submodule.Submod.branch Dev
git submodule sync
git submodule update --init --recursive --remote
6

Ce qui a corrigé cela pour moi était à la racine de votre repo git (pas le sous-module), lancez

rm -rf .git/modules/yourmodule

Ensuite, vous devriez pouvoir ajouter normalement.

5
hobberwickey

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 mon .gitmodules manuellement. J'ai aussi écrit n petit article de blog à ce sujet.

2
DerZyklop

Si vous souhaitez modifier l'URL distante uniquement pour ce clone :

git config submodule."$submodule_name".url "$new_url"

Cela n'affectera pas le .gitmodules dans le projet parent afin qu’il ne soit pas propagé à d’autres développeurs.

Ceci est décrit comme "changements d’enregistrements spécifiques à l’utilisateur" ici .

A ne pas faire lancez git submodule sync car cela réinitialisera l'URL par défaut.

1
joeytwiddle