git子模块是否有可能由其他几个git子模块组成,而超级git repo可以获取每个子模块的内容?
作者假设了一个像这样的git子模块层次结构:
这个问题是关于在子模块中嵌套子模块的可能性:
.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
请注意,子模块的路径是嵌套的:
我尝试了以下示例但没有成功:
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'
如果可以实现这种情况,请现在就告诉我。
更新:请注意,此问题与创建子模块结构有关,而不是初始化。
答案 0 :(得分:0)
是的,嵌套子模块是可能的,但不一定是可取的。 如果您确实想要创建嵌套子模块,则必须使用以下命令:
git submodule update --init --recursive
之前实际上已经提出了类似的问题。你应该看看here
答案 1 :(得分:0)
应该将子模块添加到存储库中,而不是添加到子模块中。
然后,在顶层存储库中对其进行跟踪之后,顶层存储库可用作另一个项目中的子模块,从而形成嵌套的子模块结构。
在您的示例中,您应该将gyp
作为子模块添加到V8
项目中。
如果您不能影响顶级项目,那么您应该问自己:向该项目添加子模块是什么意思?
构建所需的结构后,可以使用@iclman建议的命令以将所有子模块引入:
git submodule update --init --recursive