在 git pull 上父存储库后合并子模块更改

til*_*z0R 6 git git-pull git-merge git-submodules

如何使用单个命令获取和合并主存储库并对所有子模块执行相同操作?

我有一个包含子模块B的存储库A。子模块B经常更新,更改并不总是最新的。

我可以通过执行以下操作来更新和合并新更改

cd A/B    <-- enter submodule directory
git pull  <-- run pull to fetch and !!merge!! submodule changes
Run Code Online (Sandbox Code Playgroud)

我想要做的是运行单个命令来 pull&merge 主存储库,并对所有子模块执行相同的操作。

cd A                           <-- Now enter to parent directory
git pull --recurse-submodules  <-- Fetch&merge changes on main repository
                               <-- and pull changes on all submodules 
Run Code Online (Sandbox Code Playgroud)

实际发生的是:

  1. 获取并合并存储库A上的更改=> OK
  2. 子模块存储库B上的更改仅获取而不合并 => NOK

目前的解决方案是:

cd A
git pull --recurse-submodules
cd B
git merge   <-- Now merge fetched changes from submodule remote
Run Code Online (Sandbox Code Playgroud)

或者:

cd A
git pull --recurse-submodules
git submodule foreach git merge origin master
Run Code Online (Sandbox Code Playgroud)

我检查的其他问题,没有运气:

提取所有 git 子模块的最新版本的简单方法

在所有子目录上运行 git pull

git --help pull在 git 版本上运行2.20.1我看到这条消息:

BUGS 使用 --recurse-submodules 现在只能在已经签出的子模块中获取新提交。例如,当上游在刚刚获取的超级项目提交中添加了一个新的子模块时,子模块本身无法被获取,这使得以后无需再次获取就无法检出该子模块。预计这将在未来的 Git 版本中修复。

这与问题有关吗?