git submodule init绝对没有

时间:2016-09-29 08:51:29

标签: git git-submodules

我对“git submodule init”有一个奇怪的问题

当我使用“git submodule add url location”添加子模块时,它克隆了存储库就好了,一切正常。

当我将所有更改推回到父存储库,添加.gitmodules文件等并克隆存储库时,我尝试使用“git submodule init”初始化所有子模块

没有任何反应:(几乎没有,没有输出,没有额外的文件,它甚至没有尝试做任何事情。

所以我想知道,我做错了什么?

.gitmodules:

bash$ cat .gitmodules
[submodule "projects/subprojectA"]
    path = projects/subprojectA
    url = ssh://user@bitbucket.company.com/test/projectA.git

[submodule "projects/subprojectB"]
    path = projects/subprojectB
    url = ssh://user@bitbucket.company.com/test/projectB.git

3 个答案:

答案 0 :(得分:14)

好吧,我已经弄清楚我做错了什么。

当我添加git子模块时,我做了一个git状态,它告诉我三件事发生了变化

.gitmodules
projects/subprojectA
projects/subprojectB

当我将所有更改推送到存储库时,我不想提交子模块,因为我认为它会添加我刚刚克隆的所有文件,所以我只是做了一个git add .gitmodules并提交并推送了它。

但这是错误的,你需要做一个git commit并提交它告诉你的一切,然后当你这样做时,git会注册这些路径,当你克隆时,它会起作用。

但如果您不提交这些文件夹,它将不会注册它们,并且在您克隆父存储库时不会克隆它们。

所以这是我的错误,我误解了添加这些目录会将所有子模块代码添加到父存储库,我试图避开它并且它停止工作。

所以只需添加你的子模块并提交结果,它就可以正常工作:D

感谢Protectators的帮助,无论如何!

答案 1 :(得分:1)

克隆时使用--recursive选项。此选项初始化所有列出的子模块:

git clone --recursive

在另一种情况下,如果要初始化刚刚克隆的git的子模块,可以使用

git submodule update --init --recursive

答案 2 :(得分:0)

在使用googletest子模块的情况下,以下为我工作:

git submodule add --force https://github.com/google/googletest.git googletest

因此,您需要手动添加子模块(注意--force标志)。