我有一个包含多个子模块的项目。我想使用以下命令循环遍历每个子模块:
git submodule foreach npm install
即使其中一个子模块返回错误(非零返回代码),我也希望脚本继续循环遍历每个子模块。目前,任何一个子模块运行此命令时返回非零返回代码都会导致git停止循环遍历其余的子模块。
有什么建议可以实现这一点吗?
我有一个包含多个子模块的项目。我想使用以下命令循环遍历每个子模块:
git submodule foreach npm install
即使其中一个子模块返回错误(非零返回代码),我也希望脚本继续循环遍历每个子模块。目前,任何一个子模块运行此命令时返回非零返回代码都会导致git停止循环遍历其余的子模块。
有什么建议可以实现这一点吗?
只需让您的命令始终返回0
代码,如下所示:
git submodule foreach 'npm install || :'
这是从手册中摘录的:git help submodule
:
foreach
Evaluates an arbitrary shell command in each checked out submodule.
The command has access to the variables $name, $path, $sha1 and
$toplevel: $name is the name of the relevant submodule section in
.gitmodules, $path is the name of the submodule directory relative
to the superproject, $sha1 is the commit as recorded in the
superproject, and $toplevel is the absolute path to the top-level
of the superproject. Any submodules defined in the superproject but
not checked out are ignored by this command. Unless given --quiet,
foreach prints the name of each submodule before evaluating the
command. If --recursive is given, submodules are traversed
recursively (i.e. the given shell command is evaluated in nested
submodules as well). A non-zero return from the command in any
submodule causes the processing to terminate. This can be
overridden by adding || : to the end of the command.
As an example, git submodule foreach 'echo $path `git rev-parse
HEAD`' will show the path and currently checked out commit for each
submodule.
在bash中,help :
命令的用法为::
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
永远成功 :)
git submodule foreach 'npm install || true'
会执行相同的操作。 - Maksim Dmitrievgit submodule foreach "npm install & echo done"
编辑:原本的答案使用分号来实现,这是不正确的。
<command to find all of your submodules>|while read; do
# ... (default use $REPLY as an item)
done
while read; do
# ...
done <<< "$(command to find all of your submodules)"
请查看这个关于如何在Bash中使用循环读取命令输出的提示。
.gitmodules
... 有一种方法可以做到这一点,那就是:git config --file .gitmodules --get-regexp <regexp>
... 然后可以将其导入 while 中。 - 0xC0000022L