git submodule init绝对没有

Chr*_*mas 12 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
Run Code Online (Sandbox Code Playgroud)

Chr*_*mas 18

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

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

.gitmodules
projects/subprojectA
projects/subprojectB
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

  • 谢谢!!!你救了我的命!!!对不起,但是我很高兴我要谢谢你,我已经调试了几个小时了! (2认同)
  • 完全同意!你不知道这让我发疯了多少 (2认同)

Nut*_*ker 8

googletest子模块的情况下,以下对我有用:

git submodule add --force https://github.com/google/googletest.git googletest
Run Code Online (Sandbox Code Playgroud)

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

  • 另外,您需要删除 dest 文件夹。至少这对我有用。 (2认同)

Kew*_*sse 6

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

git clone --recursive
Run Code Online (Sandbox Code Playgroud)

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

git submodule update --init --recursive
Run Code Online (Sandbox Code Playgroud)

  • git submodule update --init --recursive 在这里什么都不做,没有克隆,什么都没有,我现在要试试 git clone --recursive (3认同)
  • git clone --recursive 也不克隆子模块,我使用的是 git 版本 2.10.0 (2认同)