我有一个脚本,最后一行是:
git diff --no-index -- ./a.json ./b.json > ./a-b.diff
diff会返回1
的退出代码,这会导致我的脚本报告错误。
如何忽略diff的退出代码,但保留内容的输出重定向到diff文件?
答案 0 :(得分:5)
尝试:
git diff --no-index -- ./a.json ./b.json > ./a-b.diff || true
或者:
git diff --no-index -- ./a.json ./b.json > ./a-b.diff || :
或者,只要您不使用bash -e
:
git diff --no-index -- ./a.json ./b.json > ./a-b.diff
true
基本上,你可以在你知道的差异之后使用任何命令产生零(成功)退出代码。
答案 1 :(得分:1)
注意:在|| true
之后必须使用git diff --no-index
的原因是,您不能忽略其退出代码。
Git 2.25(2020年第一季度)对此进行了更清晰的说明。
请参见commit 0115e5d的Denton Liu (Denton-L
)(2019年10月29日)。
(由Junio C Hamano -- gitster
--在commit d4924ea中合并,2019年12月1日)
git-diff.txt
:文档返回码--no-index
签名人:刘登顿
在
diff_no_index()
内,我们有以下内容:revs->diffopt.flags.exit_with_status = 1; ... /* * The return code for --no-index imitates diff(1): * 0 = no changes, 1 = changes, else error */ return diff_result_code(&revs->diffopt, 0);
这意味着当
git diff
在--no-index
模式下运行时,将暗示--exit-code
。
但是,git diff
中缺少此文档。在
--exit-code
文档中添加有关如何隐含--no-index
的注释,以涵盖此文档盲点。