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

git是否返回特定的返回错误代码?,git,Git,例如合并错误或重新设置错误的基础。它是否有唯一的错误代码?我设置了一个失败的测试。这就是我得到的: $ 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。简言之,否。您将看到退出代码

例如合并错误或重新设置错误的基础。它是否有唯一的错误代码?

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

$ 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

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


从源代码的快速灰显中,有一些预期的127和128用于它们的特定用途(未找到命令,已报告错误),还有一些地方有一些不寻常的代码,但对于一般的错误,都是
exit(1)

错误128,没有来自git的错误消息,可能是一个全面的错误“意外问题”


我是在其他用户需要修改.git下文件的操作(例如,“
git checkout--myfile
”以还原修改后的文件)上得到这个结果的。(在我的例子中,“
chmod-R og+w.git
”修复了它;当然,除非您了解您案例的安全含义,否则不要这样做!)

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

git push--删除源站a\u remote\u tag\u name

如果使用git版本
1.8.3.1

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

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

参见,,,,,,(2019年8月27日)和(2019年8月20日)作者。
(于2019年9月30日合并)

t4014:停止丢失git命令的返回码 目前,有两种方法可以使用Git命令的返回码 迷路了

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

另一种方式是当命令位于非赋值子shell中时
返回码将丢失,而周围命令的返回码将丢失。
重写此实例,以便Git命令输出到文件并 周围的命令仅使用非Git命令调用子shell

因此,与其写:

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


问题是,
git merge
(1.7.4-)的文档只在一个地方提到退货状态(如果您只使用“--ff”)“而且它不能进行快进提交,它返回非零-它没有明确说明如果一切正常或存在合并冲突,将返回什么。@Matt:Git命令非常非常适合成功返回零和非零(通常为1)否则。您可以始终将命令与
&&
安全地链接在一起;这就是它们的测试的实现方式。Git不适合返回一致且合理的退出代码。例如,不做任何更改的Git commit将以代码1退出,但请注意,这不是错误。从builtin/merge.c源代码中的注释中可以看出:当需要解决冲突时,后端退出1,当根本不处理给定的合并时退出2。"
git-rebase
是否有相同的行为?这对于调试提交挂钩来说非常烦人。如果提交失败,即使在git挂钩中有一个退出代码也会始终返回1而不是挂钩退出代码,这有什么意义。*nix应用程序返回状态0表示完全成功。其他状态代码由应用程序确定。有是255个其他代码,其含义取决于应用程序。有关详细信息,请参阅其
man
页面。@shawnhcorey问题在于git没有记录其非零错误代码。有时您还会看到退出代码1以获得成功。
git cat-file commit rebuild-1 >actual &&
    grep "^Side .* with .* backslash-n" actual