从GitHub克隆项目后,如何拉取git子模块

250

我有一个项目,其中指定了子模块。在开发机上一切正常。我已经提交了.gitmodules文件并在生产环境中进行了拉取。但是它没有拉取子模块。

如果我进入子模块目录并调用git pull,什么也不会发生。

在新项目中拉取这些子模块的正确方法是什么?

4个回答

388

从repo的根目录运行:

git submodule update --init

19
我相信这将实际更新您的依赖项。我认为S. Russel在下面的评论中给出了正确的命令: git pull --recurse-submodules - Spencer
2
@Spencer 命令 git submodule update --init 在 git 版本 2.31.1 中运行良好,它克隆了所有子模块。 - DrGo
1
对我来说,git submodule update --init有效,而git pull --recurse-submodules则无效。 - Someone

101

如果存在嵌套的子模块,则需要使用:

git submodule update --init --recursive

85

如果您需要将子模块中的内容拉取到子模块仓库中,请使用以下命令:

git pull --recurse-submodules

但这不会检出子模块中正确的提交(即您的主存储库所指向的提交)

要在子模块中检出正确的提交,您应该在拉取后更新它们,使用以下命令:

git submodule update --recursive

2
在第一次 git clone 时忘记使用 --recursive,所以我需要运行 git submodule update --recursive。谢谢! - mbb
24
这对我似乎不起作用。子模块仍然是空的。 - CodeMonkey
@CodeMonkey 我也是。 - linkerx
27
可能已经晚了,但对于任何在这里结束的人:git submodule update --init --recursive 解决了我的问题。 - Iglesk
2
只需要运行 git submodule update --init 命令即可,不需要加上 --recursive 参数。 - drkvogel

16

我只想分享这些内容。

第一种方法,

git submodule init && git submodule update

以下内容基本上只是将第一种方法结合起来:
git submodule update --init

如果存在任何嵌套子模块,Iglesk的答案是可行的方法。

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