假设我的
.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 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
'