Renommer un sous-module git
est-il un moyen facile de renommer un répertoire submodule git (autre que de passer par la motion entière de supprimer et de le rajouter avec un nouveau nom de destination).
et pendant que nous y sommes, Pourquoi est-ce que je ne peux tout simplement pas faire ce qui suit dans le répertoire parent: git mv old-submodule-name new-submodule-name
7 réponses
j'ai trouvé que le flux de travail suivant fonctionne:
- mise à Jour .gitmodules
-
mv oldpath newpath
-
git rm oldpath
-
git add newpath
-
git submodule sync
de l'Éditeur remarque: cette approche ne permet pas de mettre à jour l'index et .gitmodules correctement dans les versions 2018 de GIT.
Git1.8.5 (octobre 2013) devrait simplifier le processus . Il suffit de faire un:
git mv A B
git mv A B
", en déplaçant un sous-moduleA
a été enseigné à déplacer son arbre de travail et de régler les chemins dans le.gitmodules
fichier .
voir plus dans commit 0656781fadca1 :
utilise actuellement "
git mv
" sur un sous-module déplace l'arbre de travail du sous-module dans celui du superproject. Mais le réglage du chemin du sous-module dans.gitmodules
est laissé intact, ce qui est maintenant incompatible avec l'arbre de travail et rend les commandes git qui s'appuient sur le bonpath -> name mapping
(commestatus
etdiff
) se comportent étrangement.Let "
git mv
" aidez ici non seulement en déplaçant l'arbre de travail du sous-module, mais aussi en mettant à jour le paramètre"submodule.<submodule name>.path
" du fichier.gitmodules
et met en scène les deux.
Cela ne se produit pas lorsqu'aucun fichier.gitmodules
n'est trouvé et n'émet un avertissement que lorsqu'il n'y a pas de section pour ce sous-module. Cela est dû au fait que l'utilisateur peut utiliser simplement des gitlinks sans le fichier.gitmodules
ou qu'il a déjà mis à jour le chemin à la main avant d'émettre la commande "git mv" (auquel cas l'avertissement lui rappelle quemv
aurait fait cela pour lui).
Ce n'est que lorsque.gitmodules
est trouvé et contient des conflits de fusion que la commandemv
échouera et dira à l'utilisateur de résoudre le conflit avant d'essayer à nouveau.
git 2.9 (juin 2016) permettra d'améliorer la git mv
pour le sous-module:
Voir commettre a127331 (19 Avril 2016) par Stefan Beller ( stefanbeller
) .
(Regroupées par Junio C Hamano -- gitster
-- dans commettre 9cb50a3 , 29 Avril 2016)
mv
: autoriser le déplacement de sous-modules imbriqués"
git mv old new
"n'a pas ajusté correctement le chemin pour un sous-module qui vit comme un sous-répertoire à l'intérieur du répertoireold/
.sous-modules cependant besoin de mettre à jour leur lien avec le répertoire git comme ainsi que des 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 submodule a été inclus dans le projet comme un simple répertoire et non comme un submodule.
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 cours:
$ git --version
git version 1.8.4
j'ai trouvé qu'il était préférable de désactiver le sous-module, supprimer le répertoire et 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>
du moins, c'est ce qui a fonctionné le mieux pour moi. YMMV!
Modifier la .gitmodules fichier pour renommer le sous-module et ensuite renommer le répertoire de sous-module.
je pense que vous pourriez avoir besoin de faire un git submodule sync
après, mais je ne suis pas en position de vérifier maintenant.
il n'est pas possible de le renommer, donc vous devez d'abord l'enlever ( deinit
) et l'ajouter à nouveau.
donc après l'avoir enlevé:
git submodule deinit <path>
git rm --cached <path>
, vous pouvez également double vérifier et supprimer les références:
-
.gitmodules
-
.git/config
- supprimer le dossier de référence de
.git/modules/<name>
(mieux pour faire une sauvegarde), comme chaque dossier aconfig
fichier où il maintient la référence à sesworktree
Ensuite, mettez vos changements en scène en commettant tout changement à votre pension par:
git commit -am 'Removing submodule.'
et vérifiez si vous n'avez pas de questions en suspens:
git submodule update
git submodule sync
git submodule status
donc maintenant vous pouvez ajouter le sous-module git à nouveau:
git submodule add --name <custom_name> git@github.com:foo/bar.git <my/path>
MacOs : quand je veux utiliser solution VonC pour changer le dossier submodule Common
en minuscule:
git mv Common common
je reçois
fatal: renommer 'Common' failed: Invalid argument
Solution-utiliser un nom de dossier temporaire et déplacer deux fois:
git mv Common commontemp
git mv commontemp common
C'est tout :)