J'ai un projet qui contenait un sous-module, au chemin mysubmodule
. J'ai installé le dernier Git depuis la source (1.8.3-rc2) et j'ai exécuté git submodule deinit mysubmodule
. J'ai ensuite supprimé le .gitmodules
fichier et a validé la modification. J'ai également supprimé le .git
répertoire du dossier mysubmodule
.
Je voudrais valider les fichiers de mysubmodule
directement dans mon référentiel maintenant, mais git dit qu'il n'y a pas de changements. Si je tape git add mysubmodule
ça ne fait rien. Si je tape git add mysubmodule/file.txt
ça dit fatal: Path 'mysubmodule/file.txt' is in submodule 'mysubmodule'
J'ai également découvert que si vous jetez un œil à une nouvelle version du dépôt, elle crée un répertoire mysubmodule
, malgré l'absence de .gitmodules
fichier. Et courir git submodule init
vous donne un No submodule mapping found in .gitmodules for path 'mysubmodule'
Erreur.
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'est nécessaire qu'au départ? " pour en savoir plus.
Pour vérifier que, comme dans dans cette réponse , vous pouvez faire:
$ git ls-tree HEAD mysubmodule
160000 commit c0f065504bb0e8cfa2b107e975bb9dc5a34b0398 mysubmodule
Cela ne dépend pas de la présence du .gitmodule
fichier, ou sur le contenu de mysubmodule
.
Vous devez d'abord supprimer cette entrée de l'index:
git rm --cached mysubmodule
Ensuite, vous pouvez continuer.