.gitmodule中没有为非子模块的路径找到子模块映射

Ben*_*man 311 git git-submodules

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

我的.gitmodule文件看起来像这样:

[submodule "lib/three20"]
    path = lib/three20
    url = git://github.com/facebook/three20.git
Run Code Online (Sandbox Code Playgroud)

我过去克隆过这个没有错误,(git submodule init接下来是a git submodule update)并且它已经工作了一段时间.

我试图将其克隆到一台新机器,现在我收到此错误git submodule init:

No submodule mapping found in .gitmodules for path 'Classes/Support/Three20'
Run Code Online (Sandbox Code Playgroud)

该路径只是Xcode中的一个空文件夹,用于存放其他目录中的项目.它不是.gitmodules文件的一部分,所以我看不到它从哪里获得这条路径.

有任何想法吗?

小智 391

在.gitmodules中找不到路径'OtherLibrary/MKStore'时的子模块映射

$ git submodule update --init
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会发生错误.花了一分钟后,在stackoverflow中找到了答案.

$ git rm --cached OtherLibrary/MKStore
Run Code Online (Sandbox Code Playgroud)

然后再次更新子模块.它工作正常.

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

  • 在编辑.gitmodules文件以通过git://链接更改https://链接后,它对我有用 (2认同)
  • 非常感谢您的 **rm** 命令。我调用了 `git submodulesync | grep“找到映射”,然后是“git rm”,然后是“git子模块同步”。问题消失了! (2认同)

Von*_*onC 289

rajibchowdhury回答(upvoted)之后,使用git rm命令建议用于删除索引中指示子模块特殊条目(具有特殊模式的'文件夹' 160000).

如果未在(如原始问题中的' '中)引用该特殊条目路径,则需要将其删除,以避免" 找不到路径中的子模块映射 "错误消息..gitmoduleClasses/Support/Three20.gitmodules

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

git ls-files --stage | grep 160000
Run Code Online (Sandbox Code Playgroud)

上一个答案(2010年11月)

你可能没有正确地声明你的初始子模块(即在我的旧答案中没有任何尾部'/' ,即使你的.gitmodule路径看起来还不错).

这个帖子提到:

从新的克隆运行'git submodule init'时会出现同样的错误吗?
如果是这样,你就有问题了.

如果没有子模块,删除.gitmodules和.git/config中对子模块的任何引用,并确保Pikimal目录中没有.gitdir.
如果这样可以解决问题,请检查并在巡航工作副本上执行相同操作.

显然,不要删除主.gitmodules文件,而是.gitmodules在工作树中查看其他额外文件.


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

请参阅如何跟踪未跟踪的内容?为了将这样的目录转换为真正的子模块.

  • 我没有任何.gitmodules文件,我仍然在每次结账/拉取时收到此消息.我该怎么办? (4认同)
  • @aaronbauman是的,你需要删除gitlink,因此`git rm xxx`(没有尾随斜杠)`git rm --cached`允许你将它保留在磁盘上,同时从索引中删除它. (4认同)
  • 在这里找到我的答案:http://stackoverflow.com/questions/14720034/no-submodule-mapping-found-in-gitmodules-for-path (2认同)

Joh*_*nny 22

当我使用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
Run Code Online (Sandbox Code Playgroud)

我的方案是我误用了包含.git文件夹的项目目录.
SourceTree将此文件夹视为git子模块,但实际上并非如此.

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

$ git rm -r SampleProject --cached
$ git commit -m "clean up folders"
Run Code Online (Sandbox Code Playgroud)

删除git中的垃圾并保持清洁.


luk*_*sak 16

我为我解决了这个问题.最初我尝试这样做:

git submodule add --branch master [URL] [PATH_TO_SUBMODULE]
Run Code Online (Sandbox Code Playgroud)

事实证明,如果要克隆主分支,则不应使用--branch选项的规范.它抛出此错误:

fatal: Cannot force update the current branch.
Unable to checkout submodule '[PATH_TO_SUBMODULE]'
Run Code Online (Sandbox Code Playgroud)

每次你尝试做一个

git submodule sync
Run Code Online (Sandbox Code Playgroud)

将抛出此错误:

No submodule mapping found in .gitmodules for path '[PATH_TO_SUBMODULE]'
Run Code Online (Sandbox Code Playgroud)

而.gitmodules中所需的行永远不会被添加.

所以解决方案对我来说是这样的:

git submodule add [URL] [PATH_TO_SUBMODULE]
Run Code Online (Sandbox Code Playgroud)


小智 9

我刚尝试在我的repo的新结帐时"git submodule init"时遇到此错误.事实证明我最初使用错误的案例指定了模块子文件夹.因为我在Mac上使用区分大小写的文件系统(hurr),所以它失败了.例如:

git submodule add git@github.com:user/project.git MyApp/Resources/Project
Cloning into 'MyApp/Resources/Project'
Run Code Online (Sandbox Code Playgroud)

成功但麻烦的是磁盘上的路径是

Myapp/Resources/Project
Run Code Online (Sandbox Code Playgroud)

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


小智 9

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

"path = thirdsrc\boost" 
Run Code Online (Sandbox Code Playgroud)

"path = thirdsrc/boost", 
Run Code Online (Sandbox Code Playgroud)

它解决了!- -


hit*_*it9 6

只要git rm subdir 都会好的。这将删除子目录作为索引。


小智 5

刚出现这个问题.有一段时间我尝试了关于删除路径的建议,git删除路径,删除.gitmodules,从.git/config中删除条目,添加子模块,然后提交并推送更改.这令人费解,因为当我执行"git commit -a"时看起来没什么变化所以我试着推动删除,然后推动读取使其看起来像一个变化.

过了一会儿,我意外地注意到,在删除所有内容之后,如果我运行"git submodule update --init",它会有一条关于git应该不再具有任何引用的特定名称的消息:子模块的存储库名称是链接,而不是它检查出来的路径名称.Grepping显示此引用位于.git/index中.所以我运行了"git rm --cached repo-name",然后读取了模块.当我这次提交时,提交消息包含一个更改,它正在删除此意外对象.之后它工作正常.

不确定发生了什么,我猜是有人误用了git submodule命令,可能会反转参数.可能是我甚至...希望这有助于某人!


ken*_*orb 5

该文件夹映射中可以找到.git/modules的文件夹(各自具有config文件参照其worktree),因此要确保这些文件夹对应于配置在.gitmodules.git/config

因此.gitmodules具有正确的路径:

[submodule "<path>"]
  path = <path>
  url = git@github.com:foo/bar.git
Run Code Online (Sandbox Code Playgroud)

.git/modules/<path>/config[core]部分你已经在正确的道路,以你的<path>,如

[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
  worktree = ../../../<path>
Run Code Online (Sandbox Code Playgroud)

如果.git/modules缺少正确的文件夹,则必须转到子模块目录并尝试git reset HEAD --hardgit checkout master -f。如果这样做无济于事,您可能要删除对损坏的子模块的所有引用,然后再次添加它,然后参阅:重命名git子模块


归档时间:

查看次数:

234920 次

最近记录:

7 年 前