Dans mon cas, je voulais déplacer un sous-module d'un répertoire vers un sous-répertoire, par exemple "AFNetworking" -> "ext/AFNetworking". Voici les étapes que j'ai suivies :
- Modifier le fichier .gitmodules en changeant le nom et le chemin du sous-module en "ext/AFNetworking".
- Déplacer le répertoire git du sous-module de ".git/modules/AFNetworking" vers ".git/modules/ext/AFNetworking".
- Déplacez la bibliothèque de "AFNetworking" vers "ext/AFNetworking".
- Modifiez ".git/modules/ext/AFNetworking/config" et corrigez l'élément suivant
[core] worktree
ligne. La mienne est passée de ../../../AFNetworking
a ../../../../ext/AFNetworking
- Modifier "ext/AFNetworking/.git" et corriger
gitdir
. Le mien est passé de ../.git/modules/AFNetworking
a ../../git/modules/ext/AFNetworking
git add .gitmodules
git rm --cached AFNetworking
git submodule add -f <url> ext/AFNetworking
Enfin, j'ai vu dans le statut git :
matt$ git status
# On branch ios-master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: .gitmodules
# renamed: AFNetworking -> ext/AFNetworking
Et voilà. L'exemple ci-dessus ne change pas la profondeur du répertoire, ce qui fait une grande différence dans la complexité de la tâche, et ne change pas le nom du sous-module (ce qui n'est peut-être pas vraiment nécessaire, mais je l'ai fait pour être cohérent avec ce qui se passerait si j'ajoutais un nouveau module à ce chemin).
0 votes
REMARQUE : le PO répond à sa propre question par la phrase suivante
git mv
commande, juste dans la question.0 votes
CEPENDANT, vous ne pouvez pas utiliser
git mv
comme ceci. Utilisezdeinit
puisrm
comme indiqué stackoverflow.com/a/18892438/8047 .19 votes
@Yar : au moins sur git 2.0.0,
git mv
fonctionne juste pour les sous-modules également, pas besoin d'autre chose.11 votes
Commencer avec Git
1.8.5
Le déplacement des sous-modules est pris en charge de manière native à l'aide de la fonctiongit mv
( extrait des notes de mise à jour (dont le premier lien a été établi par @thisch lui-même). Voir aussi répondu ici1 votes
git mv
déplace le sous-module dans l'espace de travail, et met à jour les fichiers .git du sous-module correctement, mais le sous-dossier dans le dossier .git/modules du repo parent reste le même - est-ce correct ? (J'utilise git 2.19.0 sous Windows)