什么是 `git diff --word-diff' 默认正则表达式?

问题描述 投票:0回答:3

git diff
有与单词匹配的选项
--word-diff-regex=<...>
。某些语言有特殊的默认值(如
man 5 gitattributes
中所述)。但这些是什么?文档中没有描述,我查找了
git
的来源,也没有找到它们。

有什么想法吗?

编辑:我在

git 1.9.1
,但我会接受任何版本的答案。

git git-diff word-diff
3个回答
9
投票

源代码包含

userdiff.c
文件中的默认单词正则表达式。
PATTERNS
IPATTERN
宏将基本单词正则表达式作为其第三个参数,并添加
"|[^[:space:]]|[\xc0-\xff][\x80-\xbf]+"
以确保不属于较大单词的所有非空白字符本身被视为单词,并且假设UTF-8,不分割多字节字符。例如,在:

PATTERNS("tex", "^(\\\\((sub)*section|chapter|part)\\*{0,1}\\{.*)$",
         "\\\\[a-zA-Z@]+|\\\\.|[a-zA-Z0-9\x80-\xff]+"),

正则表达式这个词是

"\\\\[a-zA-Z@]+|\\\\.|[a-zA-Z0-9\x80-\xff]+|[^[:space:]]|[\xc0-\xff][\x80-\xbf]+"

在这种情况下,

|[\xc0-\xff][\x80-\xbf]+
恰好没有任何好处,因为
[\xc0-\xff][\x80-\xbf]+
所涵盖的所有内容都已被
[a-zA-Z0-9\x80-\xff]+
所涵盖,但它也不会造成任何伤害。


2
投票

.gitattributes

文档中给出了预定义的 diff 驱动程序列表(它们都有预定义的单词 diff 正则表达式)。进一步说明的是

您仍然需要通过 .gitattributes 使用属性机制启用此功能

因此,要激活 hvd 对所有

tex
文件的答案中显示的
*.tex
模式,您可以在项目根目录中发出以下命令(在 Windows 下省略引号):

echo '*.tex diff=tex' >> .gitattributes

1
投票

注意:关于这些模式,Git 2.34(2021 年第 4 季度)更加清晰,并提醒开发人员,

userdiff
模式应保持简单且宽松,假设它们应用的内容始终在语法上正确。

请参阅Junio C Hamano (gitster)

提交 b6029b3
(2021 年 8 月 10 日)。
(由 Junio C Hamano -- gitster
 --
合并于
commit e1eb133,2021 年 8 月 30 日)

userdiff
:对内置模式的评论

提醒开发人员,他们不需要过度实现模式来为无效构造做好准备。

它们只需足够宽松,假设有效负载在语法上是正确的,这可能会让它们变得更简单。

大部分文字来自 Johannes Sixt,并由 Johannes Sixt 进一步改进。

所以这些内置模式现在有评论:

/* * Built-in drivers for various languages, sorted by their names * (except that the "default" is left at the end). * * When writing or updating patterns, assume that the contents these * patterns are applied to are syntactically correct. The patterns * can be simple without implementing all syntactical corner cases, as * long as they are sufficiently permissive. */ static struct userdiff_driver builtin_drivers[] = {
    
© www.soinside.com 2019 - 2024. All rights reserved.