Comment append des fichiers dans Git au chemin d’un ancien sous-module?

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.