我有一个项目,在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 submodule add --branch master [URL] [PATH_TO_SUBMODULE]

事实证明,如果你想克隆主分支,不应该使用——branch选项的规范。它抛出以下错误:

fatal: Cannot force update the current branch.
Unable to checkout submodule '[PATH_TO_SUBMODULE]'

每次你试着做

git submodule sync

这个错误将被抛出:

No submodule mapping found in .gitmodules for path '[PATH_TO_SUBMODULE]'

在.gitmodules中需要的行永远不会被添加。

所以我的解决方案是:

git submodule add [URL] [PATH_TO_SUBMODULE]

其他回答

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

$ git submodule update --init

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

$ git rm --cached OtherLibrary/MKStore

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

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

在我的例子中,错误可能是由于两个分支上具有不同子模块配置的.gitmodules之间的错误合并。 在听取了这个论坛的建议后,我解决了手动编辑.gitmodules文件的问题,添加缺少的子模块条目非常容易。之后,命令 Git子模块update——init——递归 没有任何问题。

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

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

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

Myapp/Resources/Project

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

当我使用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中的垃圾并保持清洁。

通常,git会在项目的根目录(.git/)中创建一个隐藏目录。

当你在CMS上工作时,你可能会安装带有.git/目录的模块/插件,其中包含特定模块/插件的git元数据

最快的解决方案是找到所有的.git目录,只保留根git元数据目录。如果这样做,git将不会将这些模块视为项目子模块。