如何递归更新设置为跟踪分支的 git 子模块?

问题描述 投票:0回答:1

假设我的

.gitmodules
定义了许多子模块。一些子模块跟踪分支,而另一些则不。

在我想要的工作流程中,我将运行一个命令,该命令仅更新跟踪分支的子模块。所有其他子模块将保持固定到他们的提交,而不是更新到最新的远程 HEAD。

运行典型的递归子模块更新命令将更新所有子模块,这是不需要的:

git submodule update --recursive --remote --checkout

我试过在

.gitmodules
的子模块的分支字段中指定一个标签,但该标签未被识别为适当的引用。 (如预期的那样,SHA 也不起作用):

$ git submodule update --recursive --remote --checkout

fatal: Unable to find refs/remotes/origin/tags/<tag> revision in submodule path <path>

git git-submodules
1个回答
0
投票

我怀疑你需要一个脚本,因为单行代码有点太复杂了。

类似的东西,使用

git submodule foreach

#!/bin/bash

git submodule foreach '
  branch=$(git config -f $toplevel/.gitmodules submodule.$name.branch);
  if [ -n "$branch" ]; then
    echo "Updating submodule: $name";
    git switch $branch;
    git pull origin $branch;
  else
    echo "Skipping submodule: $name (no branch specified)";
  fi
'
© www.soinside.com 2019 - 2024. All rights reserved.