如何缩进git show命令的文本差异输出

时间:2020-11-08 08:00:32

标签: git

当我使用git show --no-prefix -U1000时,结果将类似于:

-var a = 0;
+const a = 0;

 no change

我想知道是否有一个选项可以在+ / -之后标识带有空格的行,例如:

- var a = 0;
+ const a = 0;

  no change

我已经在https://git-scm.com/docs/git-show处检查了文档,但似乎没有。

2 个答案:

答案 0 :(得分:0)

您可以通过脚本运行输出,如果第一个字符是空格,+或-,则会添加空格。

git diff HEAD^ | perl -pe 's{^([ +-])(.)}{$1 $2}'

还可以考虑使用git-difftool来设置自己喜欢的差异查看程序。

答案 1 :(得分:0)

我不知道git show的命令行标志在diff开头的单个+-字符后插入空格(尽管您可以更改这些标志从2.22.0--output-indicator-new=<char>--output-indicator-old=<char>以来,都是非常多的字符。

您可以做的是将输出通过管道传递到另一个程序(例如sed),以“手动”插入空格(假设终端具有足够的颜色支持):

git show --color=always | sed 's/^\x1B\[3[12]m[+-]/& /'

请注意:

  1. 在传递到自然不支持颜色的程序时,标记color=always对于保留颜色代码是必需的。
  2. 我们仅在行首的单个+-字符之后插入空格,然后仅在颜色代码\x1B[32m(绿色)或\x1B[31m前加上空格(红)。这是为了避免在提交消息(理论上可以从--- a/foo或{{1}开始)的摘要行中插入不必要的空格(即防止将- -- a/foo更改为+)。 })或在差异中间。

为避免每次都键入此命令,可以将其定义为Git alias -在别名定义中注意前导my-show字符,以将后续字符视为外部命令而不是Git子命令)。

!

然后调用git config --global alias.my-show "! git show --color=always | sed 's/^\x1B\[3[12]m[+-]/& /'" 以获得所需的输出。