如何在 GIT 中更新子模块

Jam*_*ris 5 git

以下代码是否足以更新子模块:

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

我做了一个主项目的 git pull 。

然后我做

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

更新子模块。

那个代码够吗?

sky*_*ack 10

您可以简单地使用git submodule foreach git pull它们在下载后保持更新。

要将它们与主项目一起使用,您可以使用命令的--recursive参数,也可以在克隆包含它们的存储库后git clone使用该命令git submodule update --init

编辑

我宁愿查看文档以完全理解上述命令之间的差异,但我也会尝试在下面解释它们。

git submodule update命令执行以下操作:

通过克隆丢失的子模块并更新子模块的工作树,更新已注册的子模块以匹配超级项目的期望。

这意味着它不会将子模块更新到最新的可用版本,而是检查超级项目期望使用的实际提交。

另一方面,命令git submodule foreach

在每个检出的子模块中评估任意 shell 命令。 

因此,假设 OP 知道git pull命令的作用,很容易推断出它们的组合实际上可以将所有子模块更新为最新的可用提交。

有关更多详细信息,请参阅上面的链接。

  • 解决了我的问题:子模块存储库实际上有一个“分离的 HEAD”,因此我将 HEAD 添加到一个分支,然后从子模块的目录中提取该分支。 (3认同)
  • 当我厌倦了变体“git submodule foreach git fetch”时,会获取更改,但是当我运行 git submodule foreach git pull` 时,出现错误:“您当前位于分支上。”“请指定您想要哪个分支”合并。` (2认同)