Что такое регулярные выражения `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 b6029b3userdiff: прокомментируйте встроенные шаблоны

Напомните разработчикам, что им не нужно переусердствовать при реализации шаблонов для подготовки к недопустимым конструкциям.
Они только должны быть достаточно разрешительными, предполагая, что полезная нагрузка синтаксически правильна, и это может позволить им быть проще.

Текст по большей части украден и улучшен им.

Итак, эти встроенные шаблоны теперь имеют в качестве комментария:

      /*
 * 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[] = {
Другие вопросы по тегам