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

问题描述 投票:0回答:5

我有一个项目,其中指定了子模块。一切在开发机器上运行良好。我已经提交了

.gitmodules
文件并开始制作。但是它不会拉出子模块。

如果我进入子模块目录并调用

git pull
,什么也不会发生。

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

git git-submodules
5个回答
413
投票

从存储库的根目录运行:

git submodule update --init

118
投票

如果有嵌套子模块,则需要使用:

git submodule update --init --recursive

89
投票

如果您需要将子模块的内容提取到子模块存储库中,请使用

git pull --recurse-submodules

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

要检查子模块中的正确提交,您应该在拉取后更新它们

git submodule update --recursive

18
投票

我只是想分享这些。

第一种方法,

git submodule init && git submodule update

下面只是基本上结合第一种方式,

git submodule update --init

如果有任何嵌套子模块,Iglesk 的答案就是正确的选择。


0
投票

为了完整起见,我也将答案组合起来以涵盖递归案例,希望这可以作为社区的完整答案。

由于您之前克隆了存储库,因此需要正确同步、重新初始化子模块(因为您的本地

.git/config
文件不会同步)并递归拉取:

git pull
git submodule init
git submodule update --recursive

按照@mufidu的回答,我将这两个步骤分开了。

第二行,通过将有关子模块的信息复制到本地

.git/config
(未跟踪)文件中来更新它——基于
.gitmodules file
。它实际上并不更新任何跟踪的文件或代码或子模块的内容。 请注意,由于您已经克隆了本地
.git/config
文件(就像缓存),很可能会不同步(并且不正确),否则无法修复。

第一行,

git pull ...
,是强调它已经被克隆,并覆盖建议的答案
git pull --recurse-submodules

© www.soinside.com 2019 - 2024. All rights reserved.