Search code examples
gitgit-submodules

No submodule mapping found in .gitmodule for a path that's not a submodule


I have a project that has a submodule at lib/three20

My .gitmodule file looks like this:

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

I have cloned this in the past without errors, (git submodule init followed by a git submodule update) and it's been working for a while.

I tried to clone this to a new machine, and now I'm getting this error on git submodule init:

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

That path is just an empty folder in Xcode that I use to house the projects from the other directory. It's not part of the .gitmodules file, so I don't see where it's getting this path from.

Any ideas?


Solution

  • Following rajibchowdhury's answer (upvoted), use git rm command which is advised is for removing the special entry in the index indicating a submodule (a 'folder' with a special mode 160000).

    If that special entry path isn't referenced in the .gitmodules (like 'Classes/Support/Three20' in the original question), then you need to remove it, in order to avoid the "No submodule mapping found in .gitmodules for path" error message.

    You can check all the entries in the index which are referencing submodules:

    git ls-files --stage | grep 160000
    

    Previous answer (November 2010)

    It is possible that you haven't declared your initial submodule correctly (i.e. without any tail '/' at the end, as described in my old answer, even though your .gitmodules has paths which looks OK in it).

    This thread mentions:

    Do you get the same error when running 'git submodule init' from a fresh clone?
    If so, you have something wrong.

    If you have no submodules, delete .gitmodules, and any references to submodules in .git/config, and ensure the Pikimal dir does not have a .git dir in it.
    If that fixes the problem, check in and do the same on your cruise working copy.

    Obviously, don't delete your main .gitmodules file, but look after other extra .gitmodules files in your working tree.


    Still in the topic of "incorrect submodule initialization", Jefromi mentions submodules which actually are gitlinks.

    See How to track untracked content? in order to convert such a directory to a real submodule: as commented by ipatch, and details in ipatch's notes:

    If you run into the below error when working git submodules

    mr-fancy-42-repo already exists in the index
    
    1. Remove the submodule folder / directory
    2. Remove the git cache for the folder / directory
    3. Then reinitialize submodule
    rm -Rf /path/to/mr-fancy-42-repo
    git rm -R /path/to/mr-fancy-42-repo
    git submodule add [mr-fancy-42-submodule-repo] /path/to/initialize/submodule/repo