gitは特定の戻りエラーコードを返しますか?


86

エラーのマージやリベースエラーのように。固有のエラーコードがありますか?

回答:


56

失敗するテストを設定しました。これは私が得たものです:

$ git merge newbranch
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.

$ echo $?
1

0期待どおり、Gitは正しくマージされると戻ります。


2
トラブルがある、のためのドキュメントgit merge(1.7.4で- kernel.org/pub/software/scm/git/docs/v1.7.4/git-merge.htmlは)あなたが使用している場合のみ、「(一つの場所に戻り状態に言及します- -FF-のみ」と、それはコミット早送り行うことができない、それは非ゼロを返します-それは明示的に場合に返されるものすべての作品を言っていないか、マージ競合が発生した場合。
マット・カーティス

9
@Matt:Gitコマンドは、成功した場合はゼロを返し、それ以外の場合はゼロ以外(通常は1)を返すのに非常に優れています。&&;を使用すると、いつでもコマンドを安全に連鎖させることができます。それが彼らのテストが実装される方法です。
カスカベル2011

17
Gitは、一貫性のある賢明な終了コードを返すのには適していません。たとえば、変更を加えずにgit commitを実行すると、コード1で終了しますが、エラーではありません
pfalcon 2014

3
builtin / merge.cのソースコードのコメントから:「バックエンドは、競合が解決されない場合は1で終了し、指定されたマージをまったく処理しない場合は2で終了します。」
マイク

git rebase同じ動作が?
osexp2003 2018年

60

要するに、いいえ。エラーの場合は終了コード1が表示され、成功の場合は0が表示されます。

ソースの簡単なgrepから、特定の目的(コマンドが見つからない、エラーはすでに報告されている)で予想される127と128のいくつか、およびいくつかの場所にいくつかの異常なコードがありますが、ミルエラーの実行では、すべてexit(1)


3
これは、コミットフックをデバッグするのに非常に面倒です。コミットが失敗した場合に、フックの終了コードではなく常に1が返される場合は、gitフックに終了コードを含めることのポイントは何ですか。
初心者C

* nixアプリは、完全に成功するとステータス0を返します。その他のステータスコードはアプリによって決定されます。意味がアプリに依存する255の他のコードがあります。詳細については、彼らのmanページを参照してください。
shawnhcorey

3
@shawnhcorey問題は、gitがゼロ以外のエラーコードを文書化しないことです。
イアン・ケンプ

13

git statusgit以外のリポジトリで実行すると、1ではなく128が返されます。これは、gitリポジトリが存在するかどうかをすばやく判断するのに役立ちます。


6

gitからのエラーメッセージがないエラー128は、「予期しない問題」のキャッチオールになる可能性があります。

git checkout -- myfile別のユーザーが.gitの下のファイルを変更する必要がある操作(たとえば、変更されたファイルを元に戻すには" ")でこれを取得していました。(私の場合は「chmod -R og+w .git」で修正されました。当然、セキュリティへの影響を理解していない限り、修正しないでください!)


6

git push --delete origin a_remote_tag_name

git versionを使用してタグが存在しない場合、これは256を返します 1.8.3.1

各コマンドによって返される特定の戻りコードとそれらが示すものの統合リストがあると便利です。これは、戻りコードの意味(自動化スクリプトが依存する可能性がある)の変更を防ぐのにも役立つ場合があります。


2

Git 2.24(2019年第4四半期)は、gitコマンドがコードを返す方法を示しています。

参照50094caをコミットしc1a6f21をコミットし854b5cbをコミットしdd2b6b6コミット6bd26f5をコミットしc6ec6daをコミットしf2e2fa8をコミットし460609cコミット92014b6をコミットし0ab74e9をコミットしcb46c40コミットb562a54コミット(2019年08月27日)、およびfe49814コミット(2019年08月20日)デントン劉(Denton-Lによって。
(合併によりJunio C浜野- gitster-1c6fc94コミットし、2019年9月30日)を

t4014:gitコマンドの戻りコードの損失を停止します

現在、Gitコマンドの戻りコードが失われる方法は2つあります。

最初の方法は、コマンドがパイプの上流にある場合です。パイプでは、最後のコマンドの戻りコードのみが使用されます。したがって、他のすべてのコマンドの戻りコードはマスクされます。
上流にGitコマンドがないようにパイプを書き直します。

もう1つの方法は、コマンドが非割り当てサブシェルにある場合です。
戻りコードは失われ、周囲のコマンドが優先されます。
このインスタンスを書き直して、Gitコマンドがファイルに出力し、周囲のコマンドが非Gitコマンドでサブシェルのみを呼び出すようにします。

したがって、書く代わりに:

git cat-file commit rebuild-1 | grep "^Side .* with .* backslash-n"

タイプ:

git cat-file commit rebuild-1 >actual &&
    grep "^Side .* with .* backslash-n" actual
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.