web-dev-qa-db-ja.com

ゼロ以外の終了後、「git submodule foreach」コマンドでサブモジュールのループを続けます

多くのサブモジュールを含むプロジェクトがあります。次のコマンドで各サブモジュールをループします。

git submodule foreach npm install

また、1つのサブモジュールがエラー(ゼロ以外のリターンコード)を返した場合でも、スクリプトが各サブモジュールをループし続けるようにします。現在、任意のサブモジュールでこのコマンドを実行するとゼロ以外のリターンコードが発生するため、gitは残りのサブモジュールのループを停止します。

これを達成する方法に関する推奨事項はありますか?

38
Casey Flynn

コマンドが常に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.

常に成功:)

85
gniourf_gniourf

これを見ることができます トピック

私は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のループでコマンド出力を読み取る方法に関する注意

2
Idriss Neumann