我有一个项目,其中指定了子模块。一切在开发机器上运行良好。我已经提交了
.gitmodules
文件并开始制作。但是它不会拉出子模块。
如果我进入子模块目录并调用
git pull
,什么也不会发生。
在新项目中提取这些子模块的正确方法是什么?
从存储库的根目录运行:
git submodule update --init
如果有嵌套子模块,则需要使用:
git submodule update --init --recursive
如果您需要将子模块的内容提取到子模块存储库中,请使用
git pull --recurse-submodules
但这不会在子模块中检出正确的提交(主存储库指向的提交)
要检查子模块中的正确提交,您应该在拉取后更新它们
git submodule update --recursive
我只是想分享这些。
第一种方法,
git submodule init && git submodule update
下面只是基本上结合第一种方式,
git submodule update --init
如果有任何嵌套子模块,Iglesk 的答案就是正确的选择。
为了完整起见,我也将答案组合起来以涵盖递归案例,希望这可以作为社区的完整答案。
由于您之前克隆了存储库,因此需要正确同步、重新初始化子模块(因为您的本地
.git/config
文件不会同步)并递归拉取:
git pull
git submodule init
git submodule update --recursive
按照@mufidu的回答,我将这两个步骤分开了。
第二行,通过将有关子模块的信息复制到本地
.git/config
(未跟踪)文件中来更新它——基于 .gitmodules file
。它实际上并不更新任何跟踪的文件或代码或子模块的内容。
请注意,由于您已经克隆了本地 .git/config
文件(就像缓存),很可能会不同步(并且不正确),否则无法修复。
第一行,
git pull ...
,是强调它已经被克隆,并覆盖建议的答案git pull --recurse-submodules
。