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


86

例如合并错误或重新设置错误。它具有唯一的错误代码吗?

Answers:


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
在内置/merge.c源代码中的注释中:“当要解决冲突时,后端以1退出,如果根本不处理给定的合并,则以2退出。”
迈克(Mike)

git rebase一样的行为吗?
osexp2003 '18

60

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

快速查看源代码,有一些预期的127和128用于特定目的(未找到命令,已经报告错误),并且在一些地方有一些异常代码,但是对于运行错误,它是全部exit(1)


3
这对于调试您的提交钩子非常烦人。如果失败的提交只会总是返回1而不是钩子退出代码,那么即使在git钩子中包含退出代码又有什么意义呢?
C新手C

* nix应用程序返回状态0表示完全成功。其他状态代码由应用确定。还有255个其他代码,其含义取决于应用程序。有关man详情,请参见他们的页面。
shawnhcorey

3
@shawnhcorey问题是git没有记录其非零错误代码。
伊恩·肯普


6

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

我正在git checkout -- myfile通过其他用户修改.git下文件的操作(例如,“ ”以还原修改后的文件)进行操作。(在我的案例中,“ chmod -R og+w .git”已解决;很自然,除非您了解案例的安全隐患,否则不要这样做!)


6

git push --delete origin a_remote_tag_name

如果使用git版本不存在标签,则返回256 1.8.3.1

对于每个命令返回的特定返回码及其指示内容,应该有一个合并的列表是很不错的。这也可能有助于防止更改返回码的含义(自动化脚本可能依赖)。


2

Git 2.24(Q4 2019)确实说明了 git命令返回代码。

请参阅提交50094ca提交c1a6f21提交854b5cb提交dd2b6b6提交6bd26f5提交c6ec6da提交f2e2fa8提交460609c提交92014b6提交0ab74e9提交cb46c40提交b562a54(2019年8月27日)和提交fe49814(由Denton Liu(Denton-L
(由Junio C gitsterHamano合并--commit 1c6fc94中,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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.