Использование альтернативного алгоритма сравнения в Git - PullRequest
21 голосов
/ 14 мая 2011

Поскольку git предназначен для исходного кода, его алгоритм по умолчанию diff обрабатывает строку как минимальную неделимую единицу.

Я пытаюсь отредактировать некоторые файлы уценки, которые переносятся словами в столбце 80.Добавление предложения может привести к тому, что остальная часть абзаца будет помечена как измененная.

Есть ли способ заставить Git использовать алгоритм diff, более подходящий для текста?Мне нужен тот, который рассматривает слова или предложения как неделимые единицы, а не строки?

Ответы [ 3 ]

21 голосов
/ 14 мая 2011

Вместо этого вы можете попробовать git diff --word-diff.

$ git diff --word-diff
diff --git a/test.txt b/test.txt
index 54585bb..a8cd97e 100644
--- a/test.txt
+++ b/test.txt
@@ -1,7 +1,7 @@
Because git is designed for source code, its diff algorithms {+are bibbity +}
{+bobbity boo+} treat a line as the minimum indivisible unit. I am trying to edit 
some markdown files that are word wrapped at column 80. Adding a sentence can 
cause the rest of the paragraph to be marked as changed.

Is there a way to have Git use a diff algorithm more suited to text? One that 
treats words or sentences as indivisible units rather then lines?
 No newline at end of file
11 голосов
/ 14 мая 2011

Может быть, вы ищете word-diff

- word-diff [= <mode>]

Показать слово diff, используя <mode> для разграничить измененные слова. По умолчанию, слова отделяются пробелом; увидеть --word-diff-regex ниже. <mode> по умолчанию равняется обычному и должен быть одним из

цвет

Выделить измененные слова, используя только цвета. Подразумевает - цвет.

обычный

Показать слова как [-removed-] и {} Добавлен. Не пытается убежать разделители, если они появляются в вход, поэтому вывод может быть неоднозначным.

фарфор

Использовать специальный формат строки предназначен для использования скрипта. Добавленные / удаленные / неизмененные прогоны печатается в обычном унифицированном формате формат, начинающийся с + / - / символ в начале строки и простирается до конца линии. Новые строки во входе представлены тильдой ~ по собственной линии.

нет

Снова отключите слово diff.

Обратите внимание, что, несмотря на название первый режим, цвет используется для выделения измененные части во всех режимах, если включен.

http://git -scm.com / Docs / ГИТ-Diff

7 голосов
/ 13 декабря 2011

Вот пример настройки этого (из этот вопрос ). По умолчанию --word-diff предполагает, что слово является строкой непробельных символов. Следующая команда рассмотрит слово, состоящее из одного из следующих:

  1. Строка буквенно-цифровых символов и символов подчеркивания
  2. Один не-символ

Команда:

git diff --color-words --word-diff-regex='[A-z0-9_]+|[^[:space:]]'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...