375 votes

Aucune correspondance de sous-module trouvée dans .gitmodule pour un chemin qui n'est pas un sous-module.

J'ai un projet qui a un sous-module à lib/three20

Mon .gitmodule ressemble à ceci :

[submodule "lib/three20"]
    path = lib/three20
    url = git://github.com/facebook/three20.git

J'ai cloné ceci dans le passé sans erreurs, ( git submodule init suivi d'un git submodule update ) et cela fonctionne depuis un certain temps.

J'ai essayé de le cloner sur une nouvelle machine, et maintenant j'obtiens cette erreur sur git submodule init :

No submodule mapping found in .gitmodules for path 'Classes/Support/Three20'

Ce chemin est juste un dossier vide dans Xcode que j'utilise pour héberger les projets de l'autre répertoire. Il ne fait pas partie du .gitmodules donc je ne vois pas d'où il tire ce chemin.

Des idées ?

1 votes

Il semble que vous ayez réussi à ajouter ce chemin comme un lien git - un sous-module est une combinaison d'un lien git et d'entrées dans les fichiers .gitmoddules et .git/config. Il y a eu une question récente à ce sujet ; j'essaie de la retrouver...

10 votes

0 votes

@Jefromi - Je ne trouve aucune mention de ce chemin nulle part dans la .git dossier. Faire un grep -r "Classes/Support/Three20" *.* ne donne aucun résultat non plus

454voto

rajibchowdhury Points 1336

Aucun mappage de sous-module trouvé dans .gitmodules pour le chemin 'OtherLibrary/MKStore'. lorsque

$ git submodule update --init

Je ne savais pas pourquoi l'erreur se produisait. Après avoir passé une minute et trouvé la réponse dans stackoverflow.

$ git rm --cached OtherLibrary/MKStore

et ensuite mettre à jour le sous-module à nouveau. Cela fonctionne bien.

http://en.saturngod.net/no-submodule-mapping-found-in-gitmodules

3 votes

Cela a fonctionné pour moi après avoir modifié le fichier .gitmodules pour changer les liens https:// par des liens git://.

1 votes

Cela a également fonctionné pour moi, mais je devais m'assurer qu'il n'y avait pas de barre oblique à la fin du chemin du sous-module.

0 votes

Je ne peux pas croire que j'ai oublié l'option init. Si vous clonez un projet, vous devez démarrer les sous-modules avant de les mettre à jour.

348voto

VonC Points 414372

Suivant rajibchowdhury 's réponse (upvoted), utiliser git rm qui est conseillée est pour supprimer le entrée spéciale dans l'index indiquant un sous-module (un "dossier" avec un mode spécial 160000 ).

Si cette entrée spéciale chemin n'est pas référencée dans le .gitmodule (comme ' Classes/Support/Three20 dans la question initiale), vous devez alors le supprimer, afin d'éviter le " Aucun mappage de sous-module trouvé dans .gitmodules pour le chemin Message d'erreur ".

Vous pouvez vérifier toutes les entrées de l'index qui font référence à des submodules :

git ls-files --stage | grep 160000

Réponse précédente (novembre 2010)

Il est possible que vous n'ayez pas déclaré votre sous-module initial correctement (c'est-à-dire sans queue '/' à la fin, comme décrit dans la section mon ancienne réponse même si votre .gitmodule a des chemins qui y sont bien).

Ce fil mentions :

obtenez-vous la même erreur en exécutant "git submodule init" à partir d'un nouveau clone ?
Si c'est le cas, vous avez un problème.

Si vous n'avez pas de submodules, supprimez .gitmodules et toute référence à des sous-modules dans .git/config, et s'assurer que le répertoire Pikimal n'a pas de fichier .git dir en elle.
Si cela résout le problème, vérifiez et faites de même sur votre copie de travail de croisière.

Évidemment, ne supprimez pas votre principal .gitmodules mais s'occupe d'autres éléments supplémentaires .gitmodules dans votre arbre de travail.


Toujours dans le sujet de "l'initialisation incorrecte du sous-module", Jefromi mentionne des submodules qui sont en fait des gitlinks.

Voir Comment suivre le contenu non suivi ? afin de convertir un tel répertoire en un véritable sous-module.

5 votes

Je n'ai pas de fichier .gitmodules et je reçois toujours ce message à chaque checkout / pull. Que dois-je faire ?

2 votes

J'ai trouvé ma réponse ici : stackoverflow.com/questions/14720034/

5 votes

@aaronbauman Oui, vous devez supprimer le lien git, d'où l'utilisation de la fonction git rm xxx (sans barre oblique) git rm --cached vous permet de le conserver sur le disque tout en le supprimant de l'index.

17voto

luksak Points 662

J'ai résolu ce problème pour moi. Au départ, j'ai essayé de faire ça :

git submodule add --branch master [URL] [PATH_TO_SUBMODULE]

Il s'avère que la spécification de l'option --branch ne doit pas être utilisée si vous voulez cloner la branche principale. . L'erreur suivante apparaît :

fatal: Cannot force update the current branch.
Unable to checkout submodule '[PATH_TO_SUBMODULE]'

Chaque fois que vous essayez de faire un

git submodule sync

L'erreur suivante est générée :

No submodule mapping found in .gitmodules for path '[PATH_TO_SUBMODULE]'

Et les lignes nécessaires dans .gitmodules ne sont jamais ajoutées.

La solution pour moi était donc la suivante :

git submodule add [URL] [PATH_TO_SUBMODULE]

10voto

James Moore Points 174

Je viens de rencontrer cette erreur après avoir essayé de "git submodule init" sur un nouveau checkout de mon repo. Il s'avère que j'avais spécifié le sous-dossier du module avec la mauvaise casse au départ. Comme je suis sur un Mac avec un système de fichiers sensible à la casse (hurr), cela a échoué. Par exemple :

git submodule add git@github.com:user/project.git MyApp/Resources/Project
Cloning into 'MyApp/Resources/Project'

réussit mais le problème est que sur le disque le chemin est

Myapp/Resources/Project

Ce que je ne comprends pas, c'est pourquoi git init'ing le module dans le mauvais dossier (en ignorant la case incorrecte dans ma commande) mais fonctionne ensuite correctement (en échouant) avec les commandes suivantes.

0 votes

Même chose ici (Windows), bien que je ne comprenne pas pourquoi. Vous devriez être libre de spécifier un dossier avec un casing différent pour le checkout et cela ne devrait pas changer le nom du module.

5voto

anomolos Points 91

J'ai eu ce problème. Pendant un certain temps, j'ai suivi les conseils concernant la suppression du chemin, la suppression du chemin par git, la suppression de .gitmodules, la suppression de l'entrée de .git/config, la réintégration du sous-module, puis le commit et le push de la modification. J'étais perplexe parce qu'il ne semblait pas y avoir de changement lorsque je faisais "git commit -a". J'ai donc essayé de pousser uniquement la suppression, puis de pousser la réaddition pour que cela ressemble à un changement.

Après un certain temps, j'ai remarqué par accident qu'après avoir tout supprimé, si j'exécutais "git submodule update --init", il y avait un message à propos d'un nom spécifique auquel git n'aurait plus dû faire référence : le nom du dépôt auquel le submodule était lié, et non le nom du chemin vers lequel il le vérifiait. La recherche a révélé que cette référence se trouvait dans .git/index. J'ai donc lancé "git rm --cached repo-name" et j'ai lu le module. Lorsque j'ai validé cette fois, le message de validation incluait un changement indiquant qu'il supprimait cet objet inattendu. Après cela, tout fonctionne bien.

Pas sûr de ce qui s'est passé, je suppose que quelqu'un a mal utilisé la commande git submodule, peut-être en inversant les arguments. Cela aurait pu être moi aussi... J'espère que cela aidera quelqu'un !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X