Bash 如何向git子模块foreach注入变量?
我有两个问题,(1)如何将变量注入这个Bash 如何向git子模块foreach注入变量?,bash,git,git-submodules,Bash,Git,Git Submodules,我有两个问题,(1)如何将变量注入这个foreach循环?在下面的示例中,$user\u branch在第2行中不可访问 USER_BRANCH="foo" git submodule foreach -q --recursive 'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; [ "$branch" = "" ] && git checkout $USER_BRANCH || gi
foreach
循环?在下面的示例中,$user\u branch
在第2行中不可访问
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
在回答第一个问题时,问题是您使用的是单引号,因此变量不会展开。切换到双引号应该可以修复这一部分
git submodule foreach -q --recursive "git checkout $user_branch"
对于第二个问题,建议您可以在每个模块中运行任意shell命令,因此虽然您不能像bash For循环那样构造它,但您可以运行shell脚本或由连接的多个命令代码>
foreach[--递归]
计算每个签出子模块中的任意shell命令。该命令可以访问变量$name、$path、$sha1
$toplevel:$name是中相关子模块节的名称
.gitmodules,$path是相对于的子模块目录的名称
超级项目$sha1是超级项目中记录的提交,
$toplevel是指向项目顶层的绝对路径
超级项目。超级项目中定义的任何子模块,但不包括
此命令将忽略已签出的。除非给予——安静,foreach
在计算命令之前,打印每个子模块的名称。如果
--给定递归,子模块递归遍历(即给定的shell命令也在嵌套子模块中求值)。A.
任何子模块中命令的非零返回都会导致
要终止的处理。可以通过将| |:添加到
命令结束
非常感谢,我将不得不做一些类似于git子模块foreach-q--recursive'branch=“$(git config-f$toplevel/.gitmodules子模块.$name.branch)”;[“$branch”=”]&&git checkout$USER\u branch | | git checkout$branch'-
,不知道如何将单引号替换为双引号“在此,有什么帮助吗?git子模块foreach-q——递归“branch=”$(git config-f$toplevel/.gitmodules子模块.$name.branch)\”;[-z\“$branch\”]&&git checkout$USER|branch | git checkout$branch”
-用反斜杠将dquotes中的dquotes转义。@rodee,如果您正在做一些中等复杂的事情,我会将其包装在shell脚本中。