git --recursive不能克隆子模块。

7
我了解到,要在主代码库中下载子模块,我们可以在克隆主代码库时使用--recursive选项。我也用同样的方法进行了克隆:git clone --recursive git@github.com:passion/academy.git。但是我发现它只创建了一个空的子模块目录,而没有下载其代码。
我们需要执行额外的操作吗,例如git submodule update --init --recursive?如果是的话,那么在克隆主代码库时使用--recursive标志有什么用处呢?

2
如果您使用的是Git 1.6.5或更高版本,则git clone --recursive应该按照您的期望进行。您使用的版本早于此吗?那是相当老的版本,但认为值得问一下:D - chrixian
2个回答

3
如果您使用的是足够新的git版本,但仍无法克隆子模块,则意味着这些空文件夹不是子模块,而是nested git repo
嵌套repo在其父repo中记录为gitlink,但不会有任何与之关联的.gitmodules文件。
“health-check”似乎是一个嵌套的git,但不确定何时克隆会给出“No submodule mapping found in .gitmodules for path for health-check”的错误消息。嵌套的git repo是否必须在.gitmodules中有条目?
如果您希望将嵌套的git repo识别并管理为子模块,则必须在.gitmodules中添加相应条目。
您的下一个问题所示,缺少.gitmodules中对“health-check”路径的条目可能会导致无法检出看起来是真正子模块的“hellospawn”。

@voila 还有,git ls-tree HEAD hellospawn 的输出是什么? - VonC
@voila可以解释“health-check”,那么“git ls-tree HEAD hellospawn”呢? - VonC
让我们在聊天中继续这个讨论 - voila
@voila 好的,所以它是一个gitlink。也许它指的是hellospawn仓库的空状态? 2e5c9c提交指向有内容的提交吗? - VonC
我创建了一个新的问题,更好地解释了我的当前问题。http://stackoverflow.com/questions/34410024/difference-between-nested-git-repos-and-submodules - voila
显示剩余9条评论

0

我遇到了类似的问题。有几个需要检查的地方:

  1. 检查你的.gitmodules文件:
% cat .gitmodules
[submodule "src/mysubmodule"]
    path = src/mysubmodule
    url = myurl/mysubmodule.git

2. 检查您的.git/config文件,确保子模块URL与.gitmodules中列出的相同:
% cat .git/config
...
[submodule "src/mysubmodule"]
    url = myurl/mysubmodule.git
    active = true
  1. 最后,检查URL并确保这是正确的URL(应该与您在子模块的“git clone”中键入的内容相同)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接