Comment remplacer un sous-module git par un dépôt git différent?
Plus précisément, j'ai un sous-module:
- situé à
./ExternalFrameworks/TestFramework
ce point vers un repo git[email protected]:userA/TestFramework.git
- Je voudrais qu'il pointe maintenant
[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
J'obtiens 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.
git
git-submodules
joseph.hainline
la source
la source
Réponses:
Si l'emplacement (URL) du sous-module a changé, vous pouvez simplement:
.gitmodule
fichier pour 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:
la source
rm -rf .git/modules/<submodule>
avant que ça marche pour moi.git submodule sync
aprèsrm -rf .git/modules/<submodule>
donnefatal: Not a git repository: ../.git/modules/<submodule>
. Des conseils? J'ai initialement créé le sous-module viagit submodule add https://<submodule-url>
selon les documents git ...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 finale)Maintenant, ajoutez le nouveau sous-module avec l'
--name
indicateur. Cela donnera à git un nom alternatif à référencer.git/config
pour le sous-module, à déconfliger avec le sous-module qui était là historiquement, que vous souhaitez toujours travailler dans votre histoire précédente.Alors tapez:
et vous obtiendrez le sous-module chargé sur le chemin que vous attendez.
la source
.git/modules/<path_to_submodule>
.--name
. Je n'étais pas au courant des problèmes liés à cela, et je n'ai pas pu remplacer un sous-module avant d'avoir utilisé cette option (grâce à votre réponse).git submodule add --name old-name-to-keep [email protected]:userB/new-repository.git old-name-to-keep
Ces commandes effectueront le travail à l'invite de commande sans modifier aucun fichier sur le référentiel local.
la source
Ce qui a résolu cela pour moi était à la racine de votre dépôt git (pas le sous-module), exécutez
Ensuite, vous devriez pouvoir ajouter comme d'habitude.
la source
Le moyen le plus simple que j'ai trouvé est le suivant:
Je n'ai pas aimé l'idée de modifier mon
.gitmodules
manuellement. J'ai également écrit un petit article à ce sujet.la source
Si vous souhaitez modifier l'URL distante uniquement pour ce clone :
Cela n'affectera pas le
.gitmodules
fichier du projet parent, il ne sera donc pas propagé à d'autres développeurs.Ceci est décrit comme « utilisateur change d'enregistrement spécifique » ici .
Ne pas exécuter
git submodule sync
car cela réinitialisera à nouveau l'URL par défaut.la source