我有一个项目,在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 clone --recurse-submodules https://github.com/chaconinc/MainProject

在那之后,它对我来说工作得很好,因为这里没有一个选项是有用的

它的作用是:

克隆主回购 在克隆完成后立即初始化子模块

就是这样

你可以在下面这个链接找到更多信息

其他回答

当我使用SourceTree来做这些事情时,它会吐出这条消息。 我遇到的信息是:

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

我的场景是我错用了项目目录,包含。git文件夹。 SourceTree认为这个文件夹是git的子模块,但实际上不是。

我的解决方案是使用命令行删除它。

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

清除git中的垃圾并保持清洁。

遵循rajibchowdhury的回答(被点了),使用git rm命令,建议删除索引中指示子模块的特殊条目(特殊模式为160000的“文件夹”)。

如果这个特殊的入口路径没有在.gitmodule中被引用(就像原始问题中的'Classes/Support/Three20'),那么你需要删除它,以避免“在.gitmodules for path中找不到子模块映射”错误消息。

你可以检查索引中所有引用子模块的条目:

git ls-files --stage | grep 160000

之前的回答(2010年11月)

有可能你没有正确地声明你的初始子模块(即没有任何结尾的'/',正如我以前的回答中所描述的,即使你的.gitmodule有看起来不错的路径)。

这个帖子提到:

当从一个新的克隆运行'git submodule init'时,你会得到相同的错误吗? 如果是这样,你就有问题了。 如果没有子模块,请删除.gitmodules,以及中对子模块的任何引用 .git/config,并确保Pikimal目录中没有.git目录。 如果这解决了问题,签入并在您的巡航工作副本上做同样的事情。

显然,不要删除你的主.gitmodules文件,但要照顾你工作树中其他额外的.gitmodules文件。


仍然在“不正确的子模块初始化”的主题中,Jefromi提到了实际上是gitlinks的子模块。

参见如何跟踪未跟踪的内容?以便将这样的目录转换为真正的子模块。

如果你有:

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

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

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

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

在.gitmodules文件中,我替换了字符串

"path = thirdsrc\boost" 

"path = thirdsrc/boost", 

问题解决了!- -

我刚刚在尝试“git子模块初始化”后遇到了这个错误,在我的回购的新签出。原来我最初用错误的大小写指定了模块子文件夹。因为我用的是区分大小写的Mac文件系统(hurr),所以它失败了。例如:

git submodule add git@github.com:user/project.git MyApp/Resources/Project
Cloning into 'MyApp/Resources/Project'

成功,但问题是在磁盘上的路径是

Myapp/Resources/Project

我不明白的是,为什么git将模块初始化到错误的文件夹(忽略我命令中的不正确情况),但随后使用后续命令正确操作(失败)。