git是否返回特定的返回错误代码?

时间:2011-02-07 03:34:02

标签: git

与合并错误或rebase错误类似。它是否有唯一的错误代码?

6 个答案:

答案 0 :(得分:51)

简而言之,没有。您将看到退出代码1表示错误,0表示成功。

从源代码的快速浏览中,有一些预期的127和128用于它们的特定用途(找不到命令,已经报告错误),并且在一些地方有一些不寻常的代码,但是对于磨机的运行错误,全是exit(1)

答案 1 :(得分:45)

我设置了一个失败的测试。这就是我得到的:

$ 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

Git在正确合并时返回0,如预期的那样。

答案 2 :(得分:12)

在非git repo上运行git status会返回128而不是1,这有助于快速确定是否存在git repo。

答案 3 :(得分:5)

错误128,没有来自git的错误消息,可能是“意外问题”的全部内容。

我在需要修改.git下的文件(例如“git checkout -- myfile”以恢复修改后的文件)的操作中得到了这个。 (在我的情况下,“chmod -R og+w .git”已修复它;当然,除非您了解您案件的安全隐患,否则不要这样做!)

答案 4 :(得分:3)

git push --delete origin a_remote_tag_name

如果使用git version 1.8.3.1

标记不存在,则返回256

最好有一个由每个命令返回的特定返回码的综合列表以及它们指示的内容。这也可能有助于防止更改返回代码含义(自动化脚本可能依赖这些含义)。

答案 5 :(得分:0)

Git 2.24(2019年第四季度)确实说明了git命令如何返回代码。

请参见commit 50094cacommit c1a6f21commit 854b5cbcommit dd2b6b6commit 6bd26f5commit c6ec6dacommit f2e2fa8,{{3} },commit 460609ccommit 92014b6commit 0ab74e9commit cb46c40(2019年8月27日)和commit b562a54(2019年8月20日)之前为commit fe49814。 br /> (由Denton Liu (Denton-L)Junio C Hamano -- gitster --中合并,2019年9月30日)

  

t4014:停止丢失git命令的返回码

     

目前,有两种方法可以将Git命令的返回代码   丢失。

     

第一种方法是命令在管道的上游。在一个   管道,仅使用最后一个命令的返回码。因此,所有其他   命令将屏蔽其返回码。
  重写管道,以便上游没有Git命令。

     

另一种方法是当命令位于非分配子外壳程序中时。
  返回代码将丢失,有利于周围的命令。
  重写此实例,以便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