Comment remplacer un sous-module git par un autre dépôt git?
Plus précisément, j'ai un sous-module:
./ExternalFrameworks/TestFramework
qui pointe vers un dépôt Git [email protected]:userA/TestFramework.git
[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.
Si l'emplacement (URL) du sous-module a changé, vous pouvez simplement:
.gitmodule
fichier à utiliser la nouvelle URLrm -rf .git/modules/<submodule>
rm -rf <submodule>
git submodule sync
git submodule update
Des informations plus complètes peuvent être trouvées ailleurs:
Tout d’abord, supprimez le sous-module actuel avec la méthode déjà mentionnée ici , que j’inclus par commodité:
.gitmodules
fichier.git/config
git rm --cached path_to_submodule
_ (pas de barre oblique)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.
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
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.
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.
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.