Renommer un sous-module git

Existe-t-il un moyen simple de renommer un répertoire de sous-module git (autre que le déplacement complet de la suppression et l’ajout d’un nouveau nom de destination).

Et pendant que nous y sums, 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

J’ai trouvé le travail suivant:

  • Mettre à jour les modules
  • mv oldpath newpath
  • git rm oldpath
  • git add newpath
  • git submodule sync

Note de l’éditeur: cette approche ne met pas à jour l’index et les modules .git correctement dans les versions 2018 de GIT.

Git1.8.5 (octobre 2013) devrait simplifier le processus . Faites simplement un:

 git mv AB 

git mv AB “, lors du déplacement d’un sous-module, on a appris à déplacer son arbre de travail et à ajuster les chemins dans le fichier .gitmodules .


Voir plus dans commit 0656781fadca1 :

Actuellement, l’utilisation de ” git mv ” sur un sous-module déplace l’arbre de travail du sous-module dans celui du superprojet. Mais la configuration du chemin du sous-module dans .gitmodules rest .gitmodules , ce qui est désormais incompatible avec l’arborescence de travail et fait que les commandes git basées sur le path -> name mapping correct path -> name mapping (comme status et diff ) se comportent étrangement.

Laissez ” git mv ” vous aider en déplaçant non seulement l’arbre de travail du sous-module, mais aussi en mettant à jour le paramètre ” submodule..path ” à partir du fichier .gitmodules .
Cela ne se produit pas quand aucun fichier .gitmodules n’est trouvé et émet un avertissement uniquement s’il ne comporte pas de section pour ce sous-module. Ceci est dû au fait que l’utilisateur peut simplement utiliser gitlinks sans le fichier .gitmodules ou a déjà mis à jour le paramètre de chemin avant de lancer la commande “git mv” (auquel cas l’avertissement lui rappelle que mv aurait fait pour lui).
Seulement lorsque .gitmodules est trouvé et contient des conflits de fusion, la commande mv échouera et indiquera à 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 ) .
(Fusionné par Junio ​​C Hamano – gitster – dans commit 9cb50a3 , 29 avril 2016)

mv : permet de déplacer des sous-modules nesteds

git mv old new ” n’a pas ajusté le chemin d’access d’un sous-module qui se comporte comme un sous-répertoire dans old/ directory correctement.

Les sous-modules doivent cependant 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 lorsque vous utilisez 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ésactiver le sous-module, de supprimer le répertoire et de créer un nouveau sous-module.

 git submodule deinit  git rm  git submodule add 

C’est du moins ce qui a fonctionné le mieux pour moi. YMMV!

Modifiez 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 une git submodule sync après, mais je ne suis pas en mesure de vérifier maintenant.

Il n’est pas possible de le renommer, vous devez donc le supprimer en premier ( deinit ) et l’append à nouveau.

Donc, après l’avoir enlevé:

 git submodule deinit  git rm --cached  

vous pouvez également vérifier et supprimer les références dans:

  • .gitmodules
  • .git/config
  • supprimer le dossier de référence de .git/modules/ (il est préférable de faire une sauvegarde), car chaque dossier contient un fichier de config où il conserve la référence à son worktree

puis mettez en place vos modifications en validant les modifications apscopes à votre repo en:

 git commit -am 'Removing submodule.' 

et vérifiez si vous n’avez pas de problèmes en suspens en:

 git submodule update git submodule sync git submodule status 

alors maintenant vous pouvez append le sous-module git à nouveau:

 git submodule add --name  git@github.com:foo/bar.git  

MacOs : Quand je veux utiliser la solution VonC pour changer de dossier de 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-le deux fois:

 git mv Common commontemp git mv commontemp common 

C’est tout 🙂