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

hsz*_*hsz 50 git git-submodules

我有一个项目已经指定了子模块.开发机器上的一切都运行良好.我已经.gitmodules提交文件并继续制作.但它没有拉出子模块.

如果我进入子模块目录并调用git pull,则没有任何反应.

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

Mat*_*per 87

从repo的根目录运行:

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

  • 我相信这实际上会更新您的依赖关系。我认为S. Russel在下面的评论中使用了正确的命令:git pull --recurse-submodules (2认同)
  • @Spencer 命令 `git submodule update --init` 在 git 版本 2.31.1 中工作正常;它克隆了所有子模块。 (2认同)

小智 29

如果你需要将子模块的东西拉到你的子模块库中使用

git pull --recurse-submodules
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 这似乎对我不起作用。子模块保持为空。 (7认同)
  • 对于聚会来说可能为时已晚,但是对于任何在这里结束的人:```git submodule update --init --recursive```解决了我的问题 (3认同)
  • `git submodule update --recursive` 是我在第一次 `git clone` 之后需要的,但在第一次去时忘记了 `--recursive`。谢谢! (2认同)
  • 只需 `git submodule update --init` 就帮我完成了 - 不需要 `--recursive` 。 (2认同)

小智 16

我只是想分享这些。

第一种方式,

git submodule init && git submodule update
Run Code Online (Sandbox Code Playgroud)

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

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

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


Igl*_*esk 9

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

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