【发布时间】:2019-10-01 05:20:19
【问题描述】:
例如合并错误或变基错误。它有唯一的错误代码吗?
【问题讨论】:
标签: 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(在 1.7.4 - kernel.org/pub/software/scm/git/docs/v1.7.4/git-merge.html)的文档只在一个地方提到了返回状态(如果你使用“--ff-only”并且它可以' t 执行快进提交,它返回非零值 - 如果一切正常或存在合并冲突,它没有明确说明返回的内容。
&& 安全地将命令链接在一起;他们的测试就是这样实现的。
git rebase 的行为是否相同?
简而言之,没有。您将看到退出代码 1 表示错误,0 表示成功。
通过对源的快速查找,有一些预期的 127 和 128 用于其特定目的(未找到命令,已报告错误),并且在一些地方有一些不寻常的代码,但用于磨机错误,都是exit(1)。
【讨论】:
man 页面。
在非 git repo 上运行 git status 返回 128,而不是 1,这有助于快速确定 git repo 是否存在。
【讨论】:
git rev-parse --is-inside-work-tree 更好
git push --delete origin a_remote_tag_name
如果使用 git 版本 1.8.3.1 的标签不存在,则返回 256
如果有一个每个命令返回的特定返回码及其指示的综合列表,那就太好了。这也可能有助于防止更改返回代码的含义(自动化脚本可能依赖于该含义)。
【讨论】:
错误 128,没有来自 git 的错误消息,可能是“意外问题”的包罗万象。
我在需要修改 .git 下的文件的操作(例如“git checkout -- myfile”以恢复修改的文件)中得到这个。 (在我的情况下,“chmod -R og+w .git”修复了它;当然,除非您了解对您的情况的安全影响,否则不要这样做!)
【讨论】:
Git 2.24(2019 年第四季度)确实说明了 git 命令如何返回代码。
见commit 50094ca、commit c1a6f21、commit 854b5cb、commit dd2b6b6、commit 6bd26f5、commit c6ec6da、commit f2e2fa8、commit 460609c、commit 460609c、commit 92014b6、@9876543321、@、@9876543321 @(2019 年 8 月 27 日)和 commit fe49814(2019 年 8 月 20 日)Denton Liu (Denton-L)。
(由 Junio C Hamano -- gitster -- 合并于 commit 1c6fc94,2019 年 9 月 30 日)
t4014: 停止丢失 git 命令的返回码
目前Git命令的返回码有两种方式 丢失的。
第一种方式是当命令位于管道的上游时。在一个 管道,只使用最后一个命令的返回码。因此,所有其他 命令的返回码将被屏蔽。
重写管道,使上游没有 Git 命令。另一种方式是当命令位于非赋值子shell中时。
返回代码将丢失,有利于周围的命令。
重写此实例,以便 Git 命令输出到文件和 周围的命令只调用带有非 Git 命令的子shell。
所以不要写:
git cat-file commit rebuild-1 | grep "^Side .* with .* backslash-n"
类型:
git cat-file commit rebuild-1 >actual &&
grep "^Side .* with .* backslash-n" actual
【讨论】: