多くのサブモジュールを含むプロジェクトがあります。次のコマンドで各サブモジュールをループします。
git submodule foreach npm install
また、1つのサブモジュールがエラー(ゼロ以外のリターンコード)を返した場合でも、スクリプトが各サブモジュールをループし続けるようにします。現在、任意のサブモジュールでこのコマンドを実行するとゼロ以外のリターンコードが発生するため、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を使用していませんが、.gitmodulesファイルを見つけることができれば、各サブモジュールを簡単にループできます:
<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のループでコマンド出力を読み取る方法に関する注意 。