2015-05-24 2 views
1

git diff имеет опцию --word-diff-regex=<...>, которая соответствует словам. Существуют специальные значения по умолчанию для некоторых языков (как указано в man 5 gitattributes). Но что это? Нет описания в документах, я искал источники git, не нашел их тоже.Что такое регулярные выражения `git diff -word-diff '?

Любые идеи?

EDIT: Я нахожусь на git 1.9.1, но я буду принимать ответы на любую версию.

ответ

2

Источники содержат стандартные слова регулярных выражений в файле userdiff.c. Макросы PATTERNS и IPATTERN принимают базовое слово regex в качестве третьего параметра и добавляют "|[^[:space:]]|[\xc0-\xff][\x80-\xbf]+", чтобы убедиться, что все символы без пробелов, которые не являются частью более крупного слова, рассматриваются как само слово и предполагают UTF-8 без разделяя многобайтовые символы. Так, например, в:

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

слово регулярное выражение "\\\\[[email protected]]+|\\\\.|[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]+, но это также не наносит никакого вреда.

+0

на мерзавца версии 2.8.3, $ мерзавец дифф --word-Diff-регулярное выражение = "\\\\ [A-Za-Z @ .] + | \\\\ | [A-Za-Z0-9 \ x80- \ XFF] + | [^ [: пространство:]] | [\ xc0- \ XFF] [\ x80- \ XBF] + "и git diff -word-diff дают похожие, но разные результаты –

1

В списке docs for .gitattributes приведен список предопределенных драйверов diff (все они имеют предопределенные текстовые переменные слова). Он также заявил, что

вам все еще нужно, чтобы включить это с механизмом атрибутов, с помощью .gitattributes

Так активировать tex изображенную в ответ HVd для всех *.tex файлов, вы можете Выдайте используя следующую команду в корневом каталоге проекта (кавычки опустить под Windows):

echo '*.tex diff=tex' >> .gitattributes 
Смежные вопросы