“git diff”有一个选项“--word-diff-regex=<...>”,可以匹配单词。对于某些语言,有一些特殊的默认值(如在“man 5 gitattributes”中所述)。但是这些是什么?文档中没有说明。我查看了“git”的源代码,也没有找到它们。
有什么想法吗?
编辑:我使用的是“git 1.9.1”,但我接受任何版本的答案。
有什么想法吗?
编辑:我使用的是“git 1.9.1”,但我接受任何版本的答案。
这些源代码包含在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]+"),
正则表达式(regex)的含义是"\\\\[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]+
所覆盖,但它也不会造成任何损害。
因此,要激活hvd答案中显示的tex模式以处理所有*.tex文件,您可以在项目根目录下执行以下命令(在Windows下省略引号):您仍需要通过属性机制启用此功能,即通过.gitattributes文件。
echo '*.tex diff=tex' >> .gitattributes
userdiff
模式简单和宽容,假设它们应用的内容始终是语法正确的。gitster
)进行。gitster
--在提交 e1eb133中合并,2021年8月30日)
userdiff
: 对内置模式的评论
提醒开发人员,他们不需要过度实现模式以准备处理无效结构。
他们只需要足够宽容,假设有效载荷在语法上是正确的,这可能使它们更简单。大部分文本被 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[] = {