在git diff中自定义标题

svi*_*ick 15 git diff git-diff

查看差异使用时git diff,每个更改都以以下行开头:

@@ -28,41 +20,10 @@ namespace ConsoleApplication1
Run Code Online (Sandbox Code Playgroud)

对于C,最后一部分是非常具有描述性的 - 它显示了例如发生变化的函数.但对于C#,它只显示命名空间,这不是很有用.我认为那是因为它显示的是没有缩进的最后一行.有没有办法如何配置?

svi*_*ick 19

我发现它,该行称为hunk header,文档说明如何自定义它:

定义自定义的hunk-header

文本差异输出中的每组更改(称为"hunk")都以以下形式的行为前缀:

@@ -k,l +n,m @@ TEXT
Run Code Online (Sandbox Code Playgroud)

这称为hunk标头.默认情况下,"TEXT"部分是以字母,下划线或美元符号开头的行; 这符合GNU diff -p输出使用的内容.但是,此默认选择不适用于某些内容,您可以使用自定义模式进行选择.

首先,在.gitattributes中,您将为diff路径分配属性.

*.tex   diff=tex
Run Code Online (Sandbox Code Playgroud)

然后,您将定义一个"diff.tex.xfuncname"配置来指定一个正则表达式,该表达式与您希望显示为Hunk标题"TEXT"的行匹配.在您的$GIT_DIR/config文件(或$HOME/.gitconfig文件)中添加一个部分,如下所示:

[diff "tex"]
        xfuncname = "^(\\\\(sub)*section\\{.*)$"
Run Code Online (Sandbox Code Playgroud)

注意.配置文件解析器会使用单级反斜杠,因此您需要将反斜杠加倍; 上面的模式选择一个以反斜杠开头的行,以及零或更多次出现的sub后跟section然后是open brace到行尾.