git 子模块检查来自各自远程的不同分支的最新提交

git submodule checkout latest commit of different branch from respective remotes

我的父项目添加了几个子模块。

出于部署目的,我想在每个子模块中签出特定分支,例如 masterstaging 等,并在每个子模块中提取该分支的最新提交。

我已经检查了关于 SO 的各种答案,如下所示:

但是对于 2022 年的最佳实践是什么,我感到非常困惑。我 git version 2.30.1 (Apple Git-130)

到目前为止,我已经了解到此命令可用于获取 .gitmodules 文件中已经提到的分支的最新提交(从各自的远程)。

git submodule update --remote --merge

但是对于 diff 环境部署,我该如何使用 -b 选项同时切换所有子模块中的分支?

我找到了适合我的解决方案。

简单的解决方案

git submodule foreach <command>

以上命令将为每个子模块运行。

所以我 运行 以下 2 个命令来检出所需的 b运行ch 并在每个子模块中提取最新提交

git submodule foreach git checkout -B staging origin/staging
git submodule foreach git pull --rebase

复数解

以下命令更新了 .gitmodules 文件中的目标 b运行ch

git config -f .gitmodules submodule.<submodule_path>.branch <target_branch_name>

我使用以下命令对所有子模块进行批量更新

git submodule status | awk '{ print  }' | xargs -I {} git config -f .gitmodules submodule.{}.branch master

然后以下命令拉取(获取并合并)每个子模块各自远程的最新提交

git submodule update --remote --merge

--merge 选项:

  • 省略 - 省略--merge将对子模块的远程仓库进行硬重置
  • --rebase - 这将在远程 b运行ch 的最新提交的子模块
  • 之上重新设置本地更改的基础