在子模块中添加git子模块(嵌套子模块)

时间:2015-01-23 12:37:03

标签: git git-submodules

As described in this Question

git子模块是否有可能由其他几个git子模块组成,而超级git repo可以获取每个子模块的内容?

作者假设了一个像这样的git子模块层次结构:

  • repo1
    • 子模块xyz1
    • 子模块xyz2
  • repo2
    • submodule repo1

这个问题是关于在子模块中嵌套子模块的可能性:

  • repo1
    • 子模块a
      • submodule ab
      • submodule ac

.gitmodules的真实示例应如下所示:

[submodule "Source/V8"]
    path = Source/V8
    url = https://chromium.googlesource.com/v8/v8.git
[submodule "Source/V8/build/gyp"]
    path = Source/V8/build/gyp
    url =  https://chromium.googlesource.com/external/gyp
[submodule "Source/V8/third_party/cygwin"]
    path = Source/V8/third_party/cygwin
    url = https://chromium.googlesource.com/chromium/deps/cygwin
[submodule "Source/V8/third_party/python_26"]
    path = Source/V8/third_party/python_26
    url = https://chromium.googlesource.com/chromium/deps/python_26
[submodule "Source/V8/third_party/icu"]
    path = Source/V8/third_party/icu
    url = https://chromium.googlesource.com/chromium/deps/icu52
[submodule "Source/V8/testing/gtest"]
    path = Source/V8/testing/gtest
    url = https://chromium.googlesource.com/chromium/testing/gtest
[submodule "Source/V8/testing/gmock"]
    path = Source/V8/testing/gmock
    url = https://chromium.googlesource.com/chromium/testing/gtest

请注意,子模块的路径是嵌套的:

  • 源/ V8
    • 源/ V8 /建造/ GYP
    • 源/ V8 / THIRD_PARTY / cygwin的

我尝试了以下示例但没有成功:

 git submodule add https://chromium.googlesource.com/v8/v8.git   
 Source/V8
 git submodule add https://chromium.googlesource.com/external/gyp 
 Source/V8/build/gyp 

结果:

 The following path is ignored by one of your .gitignore files:
 Source/V8/build/gyp
 Use -f if you really want to add it.

使用git submodule add -f结果:

Cloning into 'Source/V8/build/gyp'...
remote: Sending approximately 10.28 MiB ...
remote: Total 16486 (delta 10444), reused 16486 (delta 10444)
Receiving objects: 100% (16486/16486), 10.28 MiB | 2.07 MiB/s, done.
Resolving deltas: 100% (10452/10452), done.
Checking connectivity... done.
fatal: Pathspec 'Source/V8/build/gyp' is in submodule 'Source/V8'
Failed to add submodule 'Source/V8/build/gyp'

如果可以实现这种情况,请现在就告诉我。

更新:请注意,此问题与创建子模块结构有关,而不是初始化。

2 个答案:

答案 0 :(得分:0)

是的,嵌套子模块是可能的,但不一定是可取的。 如果您确实想要创建嵌套子模块,则必须使用以下命令:

git submodule update --init --recursive

之前实际上已经提出了类似的问题。你应该看看here

答案 1 :(得分:0)

应该将子模块添加到存储库中,而不是添加到子模块中。
然后,在顶层存储库中对其进行跟踪之后,顶层存储库可用作另一个项目中的子模块,从而形成嵌套的子模块结构。
在您的示例中,您应该将gyp作为子模块添加到V8项目中。 如果您不能影响顶级项目,那么您应该问自己:向该项目添加子模块是什么意思?
构建所需的结构后,可以使用@iclman建议的命令以将所有子模块引入:
git submodule update --init --recursive