Возможно, он соответствует перемещенному коду и измененным строкам, которые могут быть намного медленнее
codymanix
Я извлек отдельный скрипт для Patience Diff из Bazaar, вы можете найти его в другой ветке SO .
TryPyPy
38
Дополнительный вопрос. Когда я не должен использовать diff терпения?
балки
4
Существует также --histogramпараметр, который «... расширяет алгоритм терпения для« поддержки общих элементов с низкой частотой
Robert
Ответы:
183
Вы можете прочитать сообщение от Брэма Коэна , автора алгоритма разности терпения, но я нашел этот пост в блоге, который очень хорошо суммирует алгоритм разности терпения:
Вместо этого Patience Diff сосредотачивает свою энергию на низкочастотных линиях с высоким содержанием, которые служат маркерами или сигнатурами важного содержимого в тексте. Это по-прежнему основанный на LCS diff, но с важным отличием, поскольку он учитывает только самую длинную общую подпоследовательность строк сигнатуры:
Найдите все строки, которые встречаются ровно один раз с обеих сторон, а затем выполните самую длинную общую подпоследовательность для этих линий, сопоставляя их.
Когда вы должны использовать терпение diff? По словам Брэма, разница в терпении хороша для этой ситуации:
Действительно плохие случаи, когда две версии резко разошлись, и разработчик не заботится о том, чтобы держать размеры патчей под контролем. При таких обстоятельствах алгоритм diff может иногда становиться «смещенным» в том смысле, что он сопоставляет длинные участки фигурных скобок вместе, но в итоге он соотносит фигурные скобки функций в одной версии с фигурными скобками следующей более поздней функции в другой версии. Эта ситуация очень уродливая и может привести к совершенно непригодному файлу конфликта в ситуации, когда вам нужно, чтобы такие вещи были представлены наиболее согласованно.
По моему опыту с XML на данный момент, он дает такие же «плохие» результаты, как и обычный diff.
stivlo
5
Мне повезло больше с разницей в терпении с XML; конечно, различие, на которое я смотрю в настоящее время, имеет точно проблему смещения, описанную с помощью обычного алгоритма различий, но выглядит совершенно великолепно с разницей терпения.
Я нашел этот блог очень интересным и дает хорошее объяснение с дальнейшими ссылками на детали алгоритмов: fabiensanglard.net/git_code_review/diff.php Надеюсь, он кому-нибудь пригодится
--histogram
параметр, который «... расширяет алгоритм терпения для« поддержки общих элементов с низкой частотойОтветы:
Вы можете прочитать сообщение от Брэма Коэна , автора алгоритма разности терпения, но я нашел этот пост в блоге, который очень хорошо суммирует алгоритм разности терпения:
Когда вы должны использовать терпение diff? По словам Брэма, разница в терпении хороша для этой ситуации:
источник
Вы также можете использовать его для слияний (здесь очень хорошо работали при некоторых конфликтах XML):
источник
git config --global diff.algorithm patience
git merge -X patience
.Алгоритм измерения терпения - это более медленный алгоритм сравнения, который в некоторых случаях показывает лучшие результаты.
Предположим, у вас есть следующий файл, зарегистрированный в git:
Теперь мы изменим порядок разделов и добавим новую строку:
Алгоритм сравнения по умолчанию утверждает, что заголовки разделов изменились:
Принимая во внимание, что терпение diff показывает результат, который возможно более интуитивен:
Здесь хорошо обсуждается субъективное качество сравнения , а в git 2.11 исследуются различные эвристики. .
Обратите внимание, что алгоритм разности терпения все еще имеет некоторые известные патологические случаи .
источник