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

109
demandé sur Community 2010-12-24 17:52:18

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.

83
répondu Mariusz Nowak 2018-08-14 19:34:51

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-module A 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 bon path -> name mapping (comme status et diff ) 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 que mv aurait fait cela pour lui).

Ce n'est que lorsque .gitmodules est trouvé et contient des conflits de fusion que la commande mv é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épertoire old/ .

sous-modules cependant besoin de mettre à jour leur lien avec le répertoire git comme ainsi que des mises à jour du fichier .gitmodules .

156
répondu VonC 2016-05-07 07:43:27
$ 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/

7
répondu Mahmoud Adam 2013-05-06 16:24:12

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!

6
répondu jaredwolff 2014-03-10 19:14:56

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.

3
répondu Abizern 2010-12-24 14:59:56

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 a config fichier où il maintient la référence à ses worktree

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>
2
répondu kenorb 2016-02-28 17:02:29

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 :)

0
répondu Kamil Kiełczewski 2018-09-05 17:55:20