我有一个项目,在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文件的一部分,所以我不知道它从哪里得到这个路径。
什么好主意吗?
当我使用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中的垃圾并保持清洁。
场景:将子模块从目录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. :)
我为自己解决了这个问题。一开始我是这么做的:
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]