我有两个问题,(1)如何将变量注入此foreach
循环?在下面的示例中,第2行无法访问$user_branch
。
USER_BRANCH="foo"
git submodule foreach -q --recursive 'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; [ "$branch" = "" ] && git checkout $USER_BRANCH || git checkout $branch' –
(2)有没有办法让这个foreach
成为常规循环?,例如:
foreach $(git submodules --recursive); do
#do something
#more
#and more
done
答案 0 :(得分:1)
解决您的第一个问题,问题是您使用单引号,因此您的变量不会被扩展。切换到双引号应修复该部分。
git submodule foreach -q --recursive "git checkout $user_branch"
对于第二个问题,documentation建议您可以在每个模块中运行任意shell命令,因此虽然您不能像bash for循环那样构造它,但您可以运行shell脚本或由;
连接的多个命令。
foreach [--recursive]
在每个签出的子模块中计算任意shell命令。该命令可以访问变量$ name,$ path,$ sha1 和$ toplevel:$ name是相关子模块部分的名称 .gitmodules,$ path是相对于子模块目录的名称 超级项目,$ sha1是超级项目中记录的提交, 和$ toplevel是顶级的绝对路径 上层项目。超级项目中定义的任何子模块,但不是 此命令将忽略签出。除非给予--quiet,foreach 在评估命令之前打印每个子模块的名称。如果 - 给出递归,递归遍历子模块(即,给定的shell命令也在嵌套的子模块中计算)。一个 任何子模块中命令的非零返回都会导致 处理终止。这可以通过添加||来覆盖:到 命令结束。