Aucun mappage de sous-module trouvé dans .gitmodule pour un chemin qui n’est pas un sous-module

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

Mon fichier .gitmodule ressemble à ceci:

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

Je l’ai déjà cloné sans erreurs ( git submodule init suivi d’une git submodule update ) et cela a fonctionné pendant un moment.

J’ai essayé de cloner ceci sur une nouvelle machine, et maintenant je reçois 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. Cela ne fait pas partie du fichier .gitmodules , donc je ne vois pas d’où vient ce chemin.

Des idées?

Suivant la réponse de Rajibchowdhury (votée), utilisez la commande git rm qui est conseillée pour supprimer l’ entrée spéciale dans l’index en indiquant un sous-module (un “dossier” avec un mode spécial 160000 ).

Si ce chemin d’ entrée spécial n’est pas référencé dans le .gitmodule (comme ” Classes/Support/Three20 ” dans la question initiale), vous devez 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 aux sous-modules:

 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.-à-d. Sans queue «/» à la fin, comme décrit dans mon ancienne réponse , même si votre .gitmodule possède des chemins qui lui semblent corrects).

Ce fil mentionne:

obtenez-vous la même erreur lors de l’exécution de ‘git submodule init’ à partir d’un nouveau clone?
Si oui, vous avez quelque chose qui ne va pas.

Si vous n’avez pas de sous-modules, supprimez les .gitmodules et les références aux sous-modules dans .git / config, et assurez-vous que le répertoire Pikimal n’a pas de .git .
Si cela résout le problème, enregistrez-vous et faites la même chose sur votre copie de travail de croisière.

Evidemment, ne supprimez pas votre fichier principal .gitmodules , mais surveillez les autres fichiers .gitmodules supplémentaires de votre arborescence de travail.


Toujours dans le sujet de “l’initialisation incorrecte des sous-modules”, Jefromi mentionne des sous-modules qui sont en réalité des gitlinks.

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

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 

puis mettez à jour le sous-module à nouveau. Ça marche bien

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

Quand j’utilise SourceTree pour faire les choses, ça va cracher ce message.
Le message que j’ai rencontré:

 git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree submodule update --init --recursive No submodule mapping found in .gitmodules for path 'SampleProject/SampleProject' Completed with errors, see above 

Mon scénario est que j’ai mal appliqué le répertoire du projet le dossier contient .git .
SourceTree considérait ce dossier comme un sous-module git, mais en réalité pas.

Ma solution est d’utiliser la ligne de commande pour la supprimer.

 $ git rm -r SampleProject --cached $ git commit -m "clean up folders" 

retirez les ordures et maintenez-les propres.

J’ai résolu ce problème pour moi. Au début, j’ai essayé de faire ceci:

 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 souhaitez cloner la twig principale . Il jette cette erreur:

 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 

Cette erreur sera lancée:

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

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

Donc, la solution pour moi était la suivante:

 git submodule add [URL] [PATH_TO_SUBMODULE] 

Je viens d’appuyer sur cette erreur après avoir essayé de “git submodule init” lors d’une nouvelle vérification de mon repository. Il s’est avéré que j’avais spécifié le sous-dossier du module avec le mauvais cas au départ. Comme je suis sur un Mac avec un système de fichiers sensible à la casse (hurr), il échouait. 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 lance le module dans un mauvais dossier (en ignorant la casse incorrecte dans ma commande), mais fonctionne correctement (en échouant) avec les commandes suivantes.

Juste eu ce problème. Pendant un moment, j’ai essayé de supprimer le chemin, de supprimer le chemin, de supprimer .gitmodules, de supprimer l’entrée de .git / config, de rappend le sous-module, puis de valider et de modifier le fichier. C’était déroutant parce que ça ne semblait pas changer quand j’ai fait “git commit -a” alors j’ai essayé de pousser juste la suppression, puis de pousser la relecture pour que ça ressemble à un changement.

Au bout d’un moment, j’ai remarqué par accident qu’après avoir tout enlevé, si j’avais lancé “git submodule update –init”, il y avait un message sur un nom spécifique auquel git ne devrait plus avoir de référence: le nom du référentiel du sous-module était un lien vers, pas le nom du chemin sur lequel il vérifiait. Grepping a révélé que cette référence était en .git / index. J’ai donc lancé “git rm –cached repo-name”, puis relu le module. Lorsque j’ai validé cette fois-ci, le message de validation incluait une modification indiquant qu’il supprimait cet object inattendu. Après cela, ça marche bien.

Je ne suis pas sûr de ce qui s’est passé, je suppose que quelqu’un a mal utilisé la commande du sous-module git, peut-être en inversant les arguments. Cela aurait pu être moi même … J’espère que ça aide quelqu’un!

Le mappage de dossier peut être trouvé dans le dossier .git/modules (chacun a un fichier de config avec référence à son worktree ), alors assurez-vous que ces dossiers correspondent à la configuration dans .gitmodules et .git/config .

Donc, .gitmodules a le chemin correct:

 [submodule ""] path =  url = git@github.com:foo/bar.git 

et dans .git/modules//config dans la section [core] , vous avez le bon chemin vers votre , par exemple

 [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true worktree = ../../../ 

Si le bon dossier dans .git/modules est manquant, alors vous devez aller dans votre sous- git reset HEAD --hard dir et essayer git reset HEAD --hard ou git checkout master -f . Si cela ne vous aide pas, vous souhaiterez probablement supprimer toutes les références au sous-module cassé et l’append à nouveau, puis voir: Renommer un sous-module git .

Scénario: changer le sous-module du répertoire dirA-xxx en un autre répertoire dirB-xxx

  1. déplacer le dirA-xxx vers dirB-xxx
  2. modifier l’entrée dans les modules .git pour utiliser dirB-xxx
  3. modifier l’entrée dans .git / config pour utiliser dirB-xxx
  4. modifier .git / modules / dirA-xxx / config pour refléter le répertoire correct
  5. modifier dirA-xxx / .git pour refléter le répertoire correct
  6. exécuter le git submodule status

    if return error: Aucun mappage de sous-module trouvé dans les modules .git pour le chemin dirA-xxx. Cela est dû au fait que dirA-xxx n’existe pas, mais il est toujours suivi par git. Mettez à jour l’index git par: git rm --cached dirA-xxx

    Essayez avec git submodule foreach git pull . Je n’ai pas passé en revue l’étude de la structure du sous-module git, donc les étapes ci-dessus peuvent casser quelque chose. Néanmoins, en passant par les étapes ci-dessus, les choses semblent bonnes pour le moment. Si vous avez des idées ou des mesures appropriées pour faire avancer les choses, partagez-les ici. 🙂

Juste git rm subdir sera ok. cela supprimera le sous-répertoire en tant qu’index.

dans le fichier .gitmodules , j’ai remplacé ssortingng

 "path = thirdsrc\boost" 

avec

 "path = thirdsrc/boost", 

et ça a résolu! – –

Généralement, git crée un répertoire caché dans le répertoire racine du projet (.git /)

Lorsque vous travaillez sur un CMS, il est possible que vous installiez des modules / plugins contenant le répertoire .git / avec les métadonnées de git pour le module / plugin spécifique

La solution la plus rapide consiste à trouver tous les répertoires .git et à ne conserver que votre répertoire racine de métadonnées git. Si vous le faites, git ne considérera pas ces modules comme des sous-modules de projet.

Après avoir .gitsubmodules mes .gitsubmodules , il s’est avéré que je n’avais pas de lettre majuscule. N’oubliez pas que les répertoires .gitsubmodules sont sensibles à la casse

Dans mon cas, l’erreur était probablement due à une fusion incorrecte entre les modules .git sur deux twigs avec des configurations de sous-modules différentes. Après avoir pris des suggestions de ce forum, j’ai résolu le problème en éditant manuellement le fichier .gitmodules, ajoutant que l’entrée de sous-module manquante est assez facile. Après cela, la commande git submodule update –init –recursive a fonctionné sans problème.

Le problème pour nous était que les entrées de sous-modules en double avaient été ajoutées dans les modules .git (probablement à partir d’une fusion). Nous avons recherché le chemin dont git se plaignait dans .gitmodules et trouvé les deux sections identiques. La suppression d’une des sections a résolu le problème pour nous.

Pour ce que cela vaut, git 1.7.1 a donné l’erreur “no submodule mapping” mais git 2.13.0 ne semblait pas s’en soucier.