Что такое регулярные выражения `git diff --word-diff'по умолчанию?
git diff
имеет опцию --word-diff-regex=<...>
это соответствует словам. Существуют специальные значения по умолчанию для некоторых языков (как сказано в man 5 gitattributes
). Но что это? Нет описания в документах, я искал источники git
не нашел их тоже.
Есть идеи?
РЕДАКТИРОВАТЬ: я на git 1.9.1
, но я приму ответы для любой версии.
3 ответа
Источники содержат регулярные выражения слова по умолчанию в userdiff.c
файл. PATTERNS
а также IPATTERN
макросы принимают базовое слово regex в качестве третьего параметра и добавляют "|[^[: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]+
, но это также не причиняет никакого вреда.
Список предопределенных драйверов различий (все они имеют предопределенные регулярные выражения различий в словах) приведен в документации для.gitattributes
, Далее утверждается, что
вам все еще нужно включить это с помощью механизма атрибутов через.gitattributes
Таким образом, чтобы активировать tex
образец, показанный в ответе hvd для всех *.tex
файлы, вы можете выполнить следующую команду в корне вашего проекта (пропустите кавычки под Windows):
echo '*.tex diff=tex' >> .gitattributes
Примечание. В отношении этих шаблонов Git 2.34 (4 квартал 2021 г.) более ясен и напоминает разработчикам, что шаблоны должны быть простыми и разрешительными, предполагая, что применяемое ими содержимое всегда синтаксически корректно.
См. (10 августа 2021 г.), автор .
(Слияние Junio C Hamano ()Junio C Hamano -
gitster
- в коммите e1eb133, 30 августа 2021 г.)
Commit b6029b3
userdiff
: прокомментируйте встроенные шаблоны
Напомните разработчикам, что им не нужно переусердствовать при реализации шаблонов для подготовки к недопустимым конструкциям.
Они только должны быть достаточно разрешительными, предполагая, что полезная нагрузка синтаксически правильна, и это может позволить им быть проще.Текст по большей части украден и улучшен им.
Итак, эти встроенные шаблоны теперь имеют в качестве комментария:
/*
* 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[] = {