如何将变量注入到git子模块foreach?

时间:2018-04-19 20:44:17

标签: bash git git-submodules

我有两个问题,(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

1 个答案:

答案 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命令也在嵌套的子模块中计算)。一个   任何子模块中命令的非零返回都会导致   处理终止。这可以通过添加||来覆盖:到   命令结束。