web-dev-qa-db-fra.com

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

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

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, je ne vois donc pas d'où provient ce chemin.

Des idées?

299
Ben Scheirman

Après la commande rajibchowdhury de réponse (votante), , utilisez git rm qui est conseillé pour supprimer 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 d'origine), vous devez le supprimer, afin d'éviter le message d'erreur " Aucun mappage de sous-module trouvé dans .gitmodules for path ".

Vous pouvez vérifier toutes les entrées de l'index qui font référence à des 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é correctement votre sous-module initial (c'est-à-dire sans fin '/' à la fin, comme décrit dans mon ancienne réponse , même si votre .gitmodule a des chemins semble bien dedans).

Ce fil mentionne:

obtenez-vous la même erreur lorsque vous exécutez '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 .gitmodules, ainsi que toute référence aux sous-modules dans .git/config, et assurez-vous que le répertoire Pikimal ne contient pas de répertoire .git.
Si cela résout le problème, enregistrez-vous et procédez de la même manière sur votre copie de travail de croisière.

Évidemment, ne supprimez pas votre fichier principal .gitmodules, mais recherchez d’autres fichiers supplémentaires .gitmodules dans votre arbre de travail.


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

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

281
VonC

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 fonctionne bien.

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

379
rajibchowdhury

Quand j'utilise SourceTree pour faire le travail, cela crache 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é non.

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

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

enlever les ordures dans git et le garder propre.

22
Johnny

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

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

Comme il s'avère que la spécification de l'option --branch ne doit pas être utilisée si vous voulez cloner la branche master. 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 levée:

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

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

Donc la solution pour moi était la suivante:

git submodule add [URL] [PATH_TO_SUBMODULE]
15
luksak

Je viens de frapper cette erreur après avoir essayé de "git submodule init" lors d'une nouvelle extraction de mon repo. Il s'avère que j'avais initialement spécifié le sous-dossier du module avec le mauvais cas. Comme je suis sur un Mac avec un système de fichiers sensible à la casse (hurr), il échouait. Par exemple:

git submodule add [email protected]: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 initialise le module dans un mauvais dossier (en ignorant la casse incorrecte dans ma commande), mais fonctionne correctement (en échouant) avec les commandes suivantes.

8
James Moore

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

Donc, .gitmodules a le bon chemin:

[submodule "<path>"]
  path = <path>
  url = [email protected]:foo/bar.git

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

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

Si le bon dossier dans .git/modules est manquant, vous devez accéder à votre répertoire de sous-modules et essayer git reset HEAD --hard ou git checkout master -f. Si cela ne vous aide pas, vous voudrez probablement supprimer toutes les références au sous-module cassé et l'ajouter à nouveau, puis consultez: Renommer un sous-module git .

5
kenorb

Juste eu ce problème. Pendant un moment, j’ai essayé de conseiller sur la suppression du chemin, git le supprimer, supprimer les .gitmodules, supprimer l’entrée de .git/config, rajouter le sous-module, puis valider et appliquer le changement. C’était étonnant, car il ne semblait y avoir aucun changement lorsque j’ai fait "git commit -a";.

Après un certain temps, j’ai remarqué par accident qu’après avoir tout supprimé, si j’exécutais la commande "git submodule update --init", il contenait un message concernant un nom spécifique auquel git n'aurait plus dû faire référence: le nom du référentiel sous-module. liait vers, pas le nom du chemin, 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 j'ai relu le module. Lorsque j'ai validé cette heure, le message de validation incluait une modification indiquant qu'il supprimait cet objet inattendu. Après cela fonctionne bien.

Pas sûr de ce qui s'est passé, je suppose que quelqu'un a mal utilisé la commande de sous-module git, inversant peut-être les arguments. Ca aurait pu être moi même ... J'espère que ça aide quelqu'un!

5
anomolos

Juste git rm subdir tout ira bien. cela supprimera le sous-répertoire en tant qu'index.

5
hit9

dans le fichier . gitmodules, j'ai remplacé la chaîne

"path = thirdsrc\boost" 

avec

"path = thirdsrc/boost", 

et c'est résolu! - -

3
zhuzhai liu

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

  1. déplacez le dirA-xxx vers dirB-xxx
  2. modifier l'entrée dans .gitmodules pour utiliser dirB-xxx
  3. modifier l'entrée dans .git/config pour utiliser dirB-xxx
  4. modifiez .git/modules/dirA-xxx/config pour refléter le bon répertoire
  5. modifiez dirA-xxx/.git pour refléter le bon répertoire
  6. lancer git submodule status

    si erreur de retour: Aucun mappage de sous-module trouvé dans .gitmodules pour le chemin dirA-xxx. Cela est dû au fait que dirA-xxx n’existe pas, 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 étudié la structure des sous-modules git, donc les étapes précédentes peuvent casser quelque chose. Néanmoins, en passant par les étapes ci-dessus, les choses se présentent bien pour le moment. Si vous avez des idées ou des mesures appropriées pour faire avancer les choses, partagez-les ici. :)

3
ken

Après avoir regardé mon .gitmodules, il s'est avéré que j'avais une lettre majuscule où je n'aurais pas dû. Alors gardez à l’esprit, les répertoires .gitmodules sont sensibles à la casse

1
Kelsey

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

Lorsque vous travaillez sur un CMS, vous pouvez installer 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 à rechercher tous les répertoires .git et à ne conserver que votre répertoire de métadonnées git racine. Si vous le faites, git ne considérera pas ces modules comme des sous-modules de projet.

1
yilmi

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

Pour ce qu'il vaut, git 1.7.1 a donné l'erreur "pas de mappage de sous-module" mais git 2.13.0 ne semblait pas s'en soucier.

0
Walter Wilfinger

Dans mon cas, l'erreur était probablement due à une fusion incorrecte entre les .gitmodules de deux branches avec des configurations de sous-modules différentes. Après avoir pris des suggestions de ce forum, j'ai résolu le problème de l'édition manuelle du fichier .gitmodules. L'ajout de l'entrée de sous-module manquante est assez facile. Après cela, la commande git submodule update --init --recursive fonctionnait sans problème.

0
user2281802