web-dev-qa-db-fra.com

Comment ajouter 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é 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?

65
Chris B.

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.

86
VonC