git 子模块检查来自各自远程的不同分支的最新提交
git submodule checkout latest commit of different branch from respective remotes
我的父项目添加了几个子模块。
出于部署目的,我想在每个子模块中签出特定分支,例如 master
、staging
等,并在每个子模块中提取该分支的最新提交。
我已经检查了关于 SO 的各种答案,如下所示:
- Easy way to pull latest of all git submodules
- How can I specify a branch/tag when adding a Git submodule?
- Update Git submodule to latest commit on origin
但是对于 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 的最新提交的子模块 之上重新设置本地更改的基础
我的父项目添加了几个子模块。
出于部署目的,我想在每个子模块中签出特定分支,例如 master
、staging
等,并在每个子模块中提取该分支的最新提交。
我已经检查了关于 SO 的各种答案,如下所示:
- Easy way to pull latest of all git submodules
- How can I specify a branch/tag when adding a Git submodule?
- Update Git submodule to latest commit on origin
但是对于 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 的最新提交的子模块 之上重新设置本地更改的基础