我有一个项目,在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文件的一部分,所以我不知道它从哪里得到这个路径。

什么好主意吗?


当前回答

如果你有:

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

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

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

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

其他回答

如果你有:

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

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

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

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

我解决了删除回购和运行这个命令

git clone --recurse-submodules https://github.com/chaconinc/MainProject

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

它的作用是:

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

就是这样

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

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

"path = thirdsrc\boost" 

"path = thirdsrc/boost", 

问题解决了!- -

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

文件夹映射可以在.git/modules文件夹中找到(每个文件夹都有参考其工作树的配置文件),因此确保这些文件夹对应于.gitmodules和.git/config中的配置。

因此.gitmodules有正确的路径:

[submodule "<path>"]
  path = <path>
  url = git@github.com:foo/bar.git

在[core]部分的.git/modules/<path>/config中,你有你的<path>的正确路径,例如。

[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
  worktree = ../../../<path>

如果在.git/modules中没有正确的文件夹,那么你必须去你的子模块目录并尝试git reset HEAD——hard或git checkout master -f。如果这没有帮助,你可能想删除所有对损坏子模块的引用,然后重新添加它,然后参见:重命名git子模块。