2017-12-05 22 views
1

このgitコマンドを理解しようとしています。 私はサブモジュールを持っているソフトウェアリポジトリを持っており、そのサブモジュールは別のサブモジュールを指しています。チェックアウトするには、このコマンドが使用されます。 -gitコマンド "git checkout master ||:"

git submodule foreach --recursive 'git checkout master || :' 

このコマンドについての理解です。 このコマンドでは「||:」は何を意味しますか?私はこの質問をして、必要に応じてこれらのコマンドをより柔軟に変更できるようにしています。

このコマンドで、foreachは、見つかった各サブモジュールを意味し、masterのチェックアウトを行いますが、ここでは "||と:"は何を意味しますか?

答えて

0

cmd ||:は、コマンドが常に正常に実行されるようにするための単なる方法です。 cmdが失敗すると、:が実行され、成功するので、$?は常に0になります。つまり、サブモジュールforeachはマスターをチェックアウトしているエラーを無視しています。

1

:は、何も行わず常に成功するシェルコマンドです(と同様)。コマンドラインに
|| :を追加すると、||の左側のコマンドが失敗した場合でも、コマンド全体が正常に実行されます。この場合、サブモジュールの1つがチェックアウトすることができなくてもmasterがあっても、git submodule foreachが続行されます。

この使用は、Gitのドキュメントによって示唆される:

任意のサブモジュール内のコマンドからの非ゼロ復帰処理を終了させます。これは、コマンドの末尾に|| :を追加することによって無効にすることができます。

3
git submodule foreach --recursive '<command>' 

これは<command>in each checked out submoduleを実行します。

だからそれは理解してコマンド自体を残し:

git checkout master || : 

git checkout masterかなり明確にする必要があります。

||は、OR制御文字です。 command1 || command2の場合、command1がゼロ以外の終了ステータスを返した場合はcommand2が実行されます。だから基本的にcommand1が失敗したとき。

この場合、が失敗した場合、:が実行されます。

一方、コロンはtruein Bashの別名です。したがって、このコマンドは何もしません。完全コマンドをgit checkout masterに実行すると、になるか、それが黙って失敗します。 git submodule docs for foreachから

0

...任意のサブモジュール内のコマンドから

ゼロ以外の戻りは、処理が終了します。これは、||を追加することによってオーバーライドできます。 :コマンドの最後に。

いずれかのコマンドでコマンドが失敗しても、サブモジュールの処理を続けると言います。

makeに精通している場合は、putting a - at the front of a command then make will then ignore any errors from that commandに似ています。

0

command_a || command_b command_aがではなく、が正常に実行された場合に限り、bashはcommand_bを実行します(command_aは終了コードを0に戻します)。 :だからgit checkout master || :は常にgit checkout masterが失敗した場合でも、trueを返しますコード0

を出ると等しいtrueための代替表記法です。

git submodule foreach --recursive 'git checkout master'を書き込むだけで、いずれかのサブモジュールでチェックアウトが成功しなかった場合は中断されます。

関連する問題