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?
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 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 thePikimal
dir does not have a.git
dir in it.
If that resolves 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 on the topic of "incorrect submodule initialization", Jefromi mentions submodules which actually are gitlinks.
See "How to track untracked content?" 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
- Remove the submodule folder / directory
- Remove the git cache for the folder / directory
- 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
Luke Schoen's comment illustrates that adding a submodule using an absolute path (like ~/nunya/packages/relayer
) will make Git register it incorrectly in the index or .git/config
: .gitmodules
expects a relative path (e.g., packages/relayer
).
That mismatch can lead to the "no submodule mapping found…" error.
To summarize: stale submodule references can remain in:
.git/config
: Blocks named [submodule "packages/relayer"]
that point to the wrong path.160000
) but is not in .gitmodules
.A quick fix is to:
git rm --cached
) the stale submodule entry,.gitmodules
matches how you run git submodule add
, and