BUG, die, usage, error, warning は、さまざまな種類のエラーを報告します。

  • BUG は、決して起こらないはずの失敗した内部アサーション、つまりgit自体のバグのためのものです。

  • die は致命的なアプリケーションエラー用です。 ユーザーにメッセージを出力し、ステータス128で終了します。

  • usage は、コマンドラインの使用法のエラー用です。 メッセージを出力した後、ステータス129で終了します(parse-options APIusage_with_options も参照してください)。

  • error は、致命的ではないライブラリエラー用です。 ユーザーにメッセージを出力し、呼び出し元にエラーを通知するのに便利なように -1 を返します。

  • warning は、おそらく発生しないはずの状況を報告するためのものですが、ユーザー(およびGit)はあまり多くの問題に遭遇することなく回避を続けることができます。 error と同様に、呼び出し元に状況を報告した後、 -1 を返します。

これらのレポートは、trace2機能を介してログに記録されます。 trace2 API の「error」イベントを参照してください。

Customizable error handlers

dieerror のデフォルトの動作は、stderrにメッセージを書き込んでから、必要に応じて終了(exit)または戻ることです。 この振る舞いは、 set_die_routineset_error_routine を使用してオーバーライドできます。 例えば、 git daemon は set_die_routine を使って、 die が呼ばれた理由を syslog に書き込んでから終了するようにしています。

Library errors

各関数はエラー時に負の整数を返します。それ以外の詳細は機能ごとに異なります:

  • 一部の関数は、すべてのエラーに対して -1 を返します。 それ以外の関数は、呼び出し元がエラーにどのように反応したいかに応じて、より具体的な値を返します。

  • 一部の関数はエラーを error でstderrに報告しますが、それ以外の関数はそれを呼び出し元に任せます。

  • errno は、ほとんどの関数から戻ったときに意味がありません(システムコールの薄いラッパー(thin wrappers)を除く)。

各関数のAPIドキュメントを確認してください。

Caller-handled errors

ますます多くの関数がパラメータ struct strbuf *err を取るようになっています。エラーの場合、そのような関数は、 err strbufに何がうまくいかなかったかについてのメッセージを追加します。 メッセージは、そのまま die または error に渡されるのに十分なほど完全であることを意図しています。 例えば:

if (ref_transaction_commit(transaction, &err))
        die("%s", err.buf);

エラーが発生しなかった場合、 err パラメーターは変更されないため、複数の関数呼び出しを連鎖させることができます:

t = ref_transaction_begin(&err);
if (!t ||
    ref_transaction_update(t, "HEAD", ..., &err) ||
    ret_transaction_commit(t, &err))
        die("%s", err.buf);

err パラメーターは、有効なstrbufへのポインターでなければなりません。 メッセージを黙らせるには、明示的に無視されるstrbufを渡します:

if (thing_that_can_fail_in_an_ignorable_way(..., &err))
        /* This failure is okay. */
        strbuf_reset(&err);