Existe-t-il un moyen simple de renommer un répertoire de sous-modules git (en dehors du mouvement complet de suppression et de l'ajout d'un nouveau nom de destination).
Et pendant que nous y sommes, pourquoi est-ce que je ne peux simplement pas faire ce qui suit dans le répertoire parent: git mv old-submodule-name new-submodule-name
J'ai trouvé que le flux de travail suivant fonctionnait:
mv oldpath newpath
git rm oldpath
git add newpath
git submodule sync
Remarque: cette approche ne met pas à jour correctement l'index et les .gitmodules dans les versions 2018 de GIT.
Git1.8.5 (octobre 2013) devrait simplifier le processus . Faites simplement un:
git mv A B
"
git mv A B
", Lors du déplacement d'un sous-moduleA
a été appris à déplacer son arbre de travail et à ajuster les chemins dans le fichier.gitmodules
.
Voir plus dans commit 0656781fadca1 :
L'utilisation actuelle de "
git mv
" Sur un sous-module déplace l'arbre de travail du sous-module dans celui du superprojet. Mais le paramètre de chemin du sous-module dans.gitmodules
Reste inchangé, ce qui est maintenant incompatible avec l'arbre de travail et crée des commandes git qui s'appuient sur le bonpath -> name mapping
(Commestatus
etdiff
) se comportent étrangement.Laissons "
git mv
" Aider ici en déplaçant non seulement l'arbre de travail du sous-module, mais également en mettant à jour le paramètre "submodule.<submodule name>.path
" À partir du fichier.gitmodules
Et en organisant les deux.
Cela ne se produit pas si aucun fichier.gitmodules
N'est trouvé et n'émet un avertissement que s'il n'a pas de section pour ce sous-module. Ceci est dû au fait que l'utilisateur peut simplement utiliser des liens simples sans le fichier.gitmodules
Ou s'il a déjà mis à jour manuellement le paramètre de chemin avant d'émettre la commande "git mv" (auquel cas l'avertissement lui rappelle quemv
l'aurait fait pour lui).
Seulement lorsque.gitmodules
Est trouvé et contient des conflits de fusion, la commandemv
échouera et demandera à l'utilisateur de résoudre le conflit avant de réessayer.
git 2.9 (juin 2016) améliorera git mv
pour le sous-module:
Voir commit a127331 (19 avril 2016) par Stefan Beller (stefanbeller
) .
(Fusion par Junio C Hamano - gitster
- dans commit 9cb50a , 29 avril 2016)
mv
: autorise le déplacement de sous-modules imbriqués"
git mv old new
" N'a pas ajusté le chemin d'accès pour un sous-module qui vit comme un sous-répertoire dans le répertoireold/
Correctement.les sous-modules doivent toutefois mettre à jour leur lien vers le répertoire git, ainsi que les mises à jour du fichier
.gitmodules
.
$ mv submodule-oldpath submodule-newpath
$ git rm submodule-oldpath
$ git add submodule-newpath
$ git submodule sync
Cette solution ne fonctionne pas pour moi car lors de l’utilisation de la commande git add, le sous-module a été inclus dans le projet en tant que répertoire simple et non en tant que sous-module.
la solution correcte est:
$ mv submodule-oldpath ~/another-location
$ git rm submodule-oldpath
$ git submodule add submodule-repository-URL submodule-newpath
Source: http://bcachet.github.io/development/2012/05/25/rename-git-submodule/
Je viens d'essayer quelques-unes des suggestions ci-dessus. Je suis entrain de courir:
$ git --version
git version 1.8.4
J'ai trouvé qu'il était préférable de désinitialiser le sous-module, de supprimer le répertoire et de créer un nouveau sous-module.
git submodule deinit <submodule name>
git rm <submodule folder name>
git submodule add <address to remote git repo> <new folder name>
Au moins c'est ce qui a fonctionné le mieux pour moi. YMMV!
Il n'est pas possible de le renommer, vous devez donc d'abord le supprimer (deinit
) et l'ajouter à nouveau.
Donc après l'avoir enlevé:
git submodule deinit <path>
git rm --cached <path>
vous pouvez également vérifier et supprimer les références à:
.gitmodules
.git/config
.git/modules/<name>
(il est préférable de faire une sauvegarde), car chaque dossier contient le fichier config
où il conserve la référence à son worktree
puis organisez vos modifications en validant toutes les modifications apportées à votre repo en:
git commit -am 'Removing submodule.'
et vérifiez si vous n'avez aucun problème en suspens en:
git submodule update
git submodule sync
git submodule status
alors maintenant vous pouvez ajouter le sous-module git à nouveau:
git submodule add --name <custom_name> [email protected]:foo/bar.git <my/path>
Editez le fichier .gitmodules pour renommer le sous-module, puis renommez le répertoire du sous-module.
Je pense que vous pourriez avoir besoin de faire un git submodule sync
après, mais je ne suis pas en mesure de vérifier pour le moment.
MacOs : Quand je veux utiliser solution VonC pour changer le dossier du sous-module Common
en minuscule:
git mv Common common
Je reçois
fatal: renommer 'Common' a échoué: argument invalide
Solution - utilisez un nom de dossier temporaire et déplacez-vous deux fois:
git mv Common commontemp
git mv commontemp common
C'est tout :)