J’ai un projet qui contenait un sous-module, au chemin mysubmodule
. J’ai installé la dernière version de Git depuis la source (1.8.3-rc2) et git submodule deinit mysubmodule
lancé git submodule deinit mysubmodule
. J’ai ensuite supprimé le fichier .gitmodules
et commis le changement. J’ai également supprimé le répertoire mysubmodule
dossier mysubmodule
.
Je voudrais commettre les fichiers de mysubmodule
directement dans mon repo maintenant, mais git dit qu’il n’y a pas de changements. Si je tape git add mysubmodule
il ne fait rien. Si je tape git add mysubmodule/file.txt
il dit fatal: Path 'mysubmodule/file.txt' is in submodule 'mysubmodule'
J’ai également découvert que si vous mysubmodule
une nouvelle version du repository, il crée un répertoire mysubmodule
, même s’il ne .gitmodules
aucun fichier .gitmodules
. Et lancer git submodule init
vous donne un No submodule mapping found in .gitmodules for path 'mysubmodule'
erreur No submodule mapping found in .gitmodules for path 'mysubmodule'
.
Comment puis-je réparer ça?
Git pense toujours que mysubmodule
est un sous-module, car il est enregistré dans l’index avec un mode spécial “160000”.
Voir “La mise à jour du sous-module git n’a été nécessaire qu’au début? ”
Pour vérifier que, comme dans cette réponse , vous pouvez faire un:
$ git ls-tree HEAD mysubmodule 160000 commit c0f065504bb0e8cfa2b107e975bb9dc5a34b0398 mysubmodule
Cela ne dépend pas de la présence du fichier .gitmodule
ou du contenu de mysubmodule
.
Vous devez d’abord supprimer cette entrée de l’index:
git rm --cached mysubmodule
Ensuite, vous pouvez continuer.