我有一个项目,在lib/three20有一个子模块

我的.gitmodule文件是这样的:

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

我克隆了这个在过去没有错误,(git子模块init紧随git子模块更新),它已经工作了一段时间。

我试图克隆这个到一个新的机器,现在我在git子模块init上得到这个错误:

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

这个路径只是Xcode中的一个空文件夹,我用它来存放来自另一个目录的项目。它不是.gitmodules文件的一部分,所以我不知道它从哪里得到这个路径。

什么好主意吗?


当前回答

有个问题。有一段时间,我尝试了删除路径的建议,git删除路径,删除.gitmodules,从.git/config中删除条目,重新添加子模块,然后提交并推送更改。这是令人困惑的,因为当我做“git commit -a”时,它看起来没有变化,所以我试着只推删除,然后推读取,使它看起来像一个变化。

After a while I noticed by accident that after removing everything, if I ran "git submodule update --init", it had a message about a specific name that git should no longer have had any reference to: the name of the repository the submodule was linking to, not the path name it was checking it out to. Grepping revealed that this reference was in .git/index. So I ran "git rm --cached repo-name" and then readded the module. When I committed this time, the commit message included a change that it was deleting this unexpected object. After that it works fine.

不知道发生了什么,我猜有人误用了git子模块命令,可能颠倒了参数。甚至可能是我……希望这能帮助到一些人!

其他回答

在查看了我的.gitmodules之后,我发现我确实在不应该出现的地方出现了一个大写字母。所以请记住,.gitmodules目录是区分大小写的

如果你有:

删除子模块使用简单的rm代替git rm; 在.gitmodules中删除了对子模块的引用; 删除了.git/config中的引用;

你还是会得到错误,解决这个问题的方法是读回子模块原来所在的空文件夹。你可以这样做:

mkdir -p path/to/your/submodule
touch path/to/your/submodule/.keep

.keep只是一个空文件。Git提交后错误就会消失。

文件夹结构

xyz folder as root directory which contains 2 folder as submodule
  -- product
  -- user

从根目录执行以下命令

git rm --cached product/
git rm --cached user/

进入产品目录并执行

 git submodule update --init

进入用户目录并执行

git submodule update --init

再次进入根目录CD ..

git add --all

场景:将子模块从目录dirA-xxx更改为另一个目录dirB-xxx

move the dirA-xxx to dirB-xxx modify entry in .gitmodules to use dirB-xxx modify entry in .git/config to use dirB-xxx modify .git/modules/dirA-xxx/config to reflect the correct directory modify dirA-xxx/.git to reflect the correct directory run git submodule status if return error: No submodule mapping found in .gitmodules for path dirA-xxx. This is due to dirA-xxx is not existing, yet it is still tracked by git. Update the git index by: git rm --cached dirA-xxx Try with git submodule foreach git pull. I didn't go through the actual study of git submodule structure, so above steps may break something. Nonetheless going through above steps, things look good at the moment. If you have any insight or proper steps to get thing done, do share it here. :)

在.gitmodules中找不到路径“OtherLibrary/MKStore”的子模块映射 当

$ git submodule update --init

我不知道为什么会出现错误。花了一分钟,在stackoverflow中找到了答案。

$ git rm --cached OtherLibrary/MKStore

然后再次更新子模块。它工作得很好。

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