繁体   English   中英

如何在Shell脚本中获取git diff命令的output

[英]How to get the output of git diff command in Shell Script

我正在尝试在具有相同文件的两个分支中执行 Git diff。 我想得到两个文件的区别。

  • 如果出现致命错误
  • 如果有差异/不匹配
  • 如果没有差异/匹配

我尝试将命令保存在变量中以获取结果。 示例:GIT_DIFF=$(git diff RB_202005:/test.txt RB_202006:/test.txt) 然后打印变量(示例:echo $GIT_DIFF)但没有返回任何内容。

因为你只对“无差异”、“差异”、“错误”的情况感兴趣,所以我会运行一个

git diff --exit-code --quiet .....

--exit-code以普通diff的方式设置退出代码。

--quiet抑制 output。

如果退出代码为 0,则没有差异。

如果退出代码为 1,则说明存在差异。

如果退出代码是 2 或 128,则您有致命错误。

更新正如 OP 在评论中指出的那样,如果要比较的文件不存在, git-diff --exit-code会产生状态代码 128。 根据手册页,它应该产生与标准diff相同的退出代码,即 2。因此最好将任何大于 1 的退出代码视为标准错误。 这也会捕获git本身未找到的情况(在这种情况下,shell 可能会报告退出代码 127)。

这并不总是适用于新的(Git 2.30,2021 年第一季度) git diff -I ,如果你想忽略差异模式。

当所有更改都匹配忽略的模式时,“ git diff -I<pattern> -exit-code ( man ) ”应该以 0 状态退出,但事实并非如此。

请参阅Junio C Hamano ( gitster )提交 50f0439 (2020 年 12 月 16 日)。
(由Junio C Hamano 合并gitster 提交 59fcf74,2020年 12 月 18 日)

diff--exit-code-I<pattern>之间的正确交互

就像“ git diff -w --exit-code( man )应该以 0 退出,当忽略空白差异导致不显示任何更改时,如果忽略某些更改与 “ git diff -I<pattern> --exit-code ( man ) ”导致一个空补丁,我们应该以 0 退出。

测试套件没有涵盖“ --exit-code ”和“ -w ”之间的交互; 在为“ --exit-code ”+“ -I I”添加新测试时添加一个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM