2249


git の man ページや、公式ドキュメントを読んでも、 exit status に関する記述が見当たらないように感じています。 shell script
で、git の操作を自動化するときには、 exit status を正しく利用することが必要であると考えています。

ひとつひとつのコマンドについて、どういうときにどうなるといった、テストをいちいち行っていくのは避けたいのですが、どこかにこの情報はまとまっていたりしないでしょうか。


CC BY-SA 3.0
2014-12-20T10:35:15.160
2240
2014-12-20T13:04:12.360
754
question
git
git の exit status に関する資料を得るには？


そうなりますと、ソースコードを確認するしかないでしょうね。

[code]

    $ git clone https://code.google.com/p/git-core/
    
[/code]

git コマンドの `main function` があるのは、`git-core/git.c` です。

[code]

    int main(int argc, char **av)
    {
      const char **argv = (const char **) av;
      const char *cmd;
               :
      fprintf(stderr, "Failed to run command '%s': %s\n",
        cmd, strerror(errno));
    
      return 1;
    }
    
[/code]

`1` を返していますが、これは存在しないサブコマンドを指定するなどした場合の処理です。サブコマンドの実行開始は、同じく `git.c` にある
`handle_builtin function` で行われています。

[code]

    static void handle_builtin(int argc, const char **argv)
    {
                      :
      builtin = get_builtin(cmd);
      if (builtin) {
        if (saved_environment && (builtin->option & NO_SETUP))
           restore_env();
        else
           exit(run_builtin(builtin, argc, argv));
    }
    
[/code]

`exit()` の引数になっている `run_builtin function` も `git.c` にあります。

[code]

    static int run_builtin(struct cmd_struct *p, int argc, const char **argv)
    {
                  :
      status = p->fn(argc, argv, prefix);
      if (status)
        return status;
                  :
      return 0;
    
[/code]

基本的に、`0` なら成功、`0` 以外なら何か問題が発生したという理解でよろしいかと思いますが、 エラー発生時の exit status
の具体的な値についてはそれぞれのサブコマンドの該当部分(return文)を確認する必要があるでしょう。


CC BY-SA 3.0
2014-12-20T12:08:40.150
2245
2014-12-20T12:18:10.267
2014-12-20T12:18:10.267
2240
answer


>
> ひとつひとつのコマンドについて、どういうときにどうなるといった、テストをいちいち行っていくのは避けたいのですが、どこかにこの情報はまとまっていたりしないでしょうか

git のサブコマンドは、それぞれに異なる成功と失敗の定義があります。 さらに diff なんかには、 終了コードの意味を変えてしまう `\--exit-
code` のようなオプションも存在します。 ゆえにサブコマンド毎のヘルプを参照するのが、もっとも良いでしょう。

もちろんソースを参照するのも良い(私は好きなアプローチ)ですが…まぁ、普通は手間がかかりすぎるのでやらないですよねw


CC BY-SA 3.0
2014-12-20T13:04:12.360
2249
2014-12-20T13:04:12.360
208
2240
answer