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?
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.
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
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.
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]
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.
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 .
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!
Juste git rm subdir
tout ira bien. cela supprimera le sous-répertoire en tant qu'index.
dans le fichier . gitmodules, j'ai remplacé la chaîne
"path = thirdsrc\boost"
avec
"path = thirdsrc/boost",
et c'est résolu! - -
Scénario: changer le sous-module du répertoire dirA-xxx vers un autre répertoire dirB-xxx
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. :)
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
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.
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.
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.