Какова версия diff для git? diff2 или diff3?
У кого-нибудь есть подсказка, какая версия diff используется в git?
В этой статье, например, подробно объясняется алгоритм сравнения для чайников, но какой алгоритм используется в действительности?
Для общего знания здесь спецификации для diff2
& diff3
,
diff2
: http://www.xmailserver.org/diff2.pdfdiff3
: http://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf
Я знаю, что вы можете настроить GIT для использования diff2
или же diff3
git config --global merge.conflictstyle diff3
2 ответа
Вы, кажется, путаете 3 разные вещи
- Инструмент командной строки Unix
diff3
предоставлено GNU diffutils - Формат вывода diff, который предоставляет git (в котором
diff3
опция не по умолчанию) - Алгоритм, который Git использует для генерации различий
Git поддерживает 4 разных алгоритма сравнения.
Вы можете указать через командную строку git diff
--minimal
Spend extra time to make sure the smallest possible diff is produced.
--patience
Generate a diff using the "patience diff" algorithm.
--histogram
Generate a diff using the "histogram diff" algorithm.
--diff-algorithm={patience|minimal|histogram|myers}
Choose a diff algorithm. The variants are as follows:
default, myers
The basic greedy diff algorithm. Currently, this is the default.
minimal
Spend extra time to make sure the smallest possible diff is produced.
patience
Use "patience diff" algorithm when generating patches.
histogram
This algorithm extends the patience algorithm to "support low-occurrence common elements".
или через конфигурацию git.
diff.algorithm
Choose a diff algorithm. The variants are as follows:
default, myers
The basic greedy diff algorithm. Currently, this is the default.
minimal
Spend extra time to make sure the smallest possible diff is produced.
patience
Use "patience diff" algorithm when generating patches.
histogram
This algorithm extends the patience algorithm to "support low-occurrence common elements".
diff2
pdf-ссылка в вашем оригинальном вопросе - это описание myers
Алгоритм, и, кажется, не имеет отношения к 2-сторонним маркерам конфликтов git-вызовов diff2
в merge.conflictStyle
,
Точно так же инструмент Unix diff3
не связан с 3-сторонними маркерами конфликта diff3
,
Я нашел ответ в документации по конфигурации:
Git по умолчанию является diff2
merge.conflictStyle
Укажите стиль, в котором конфликтующие фрагменты записываются в файлы рабочего дерева при слиянии.
По умолчанию используется "слияние", которое показывает маркер конфликта <<<<<<<,
изменения, внесенные одной стороной, ======= маркер,
изменения, сделанные другой стороной,
а затем >>>>>>> маркер. Альтернативный стиль,"diff3", добавляет ||||||| маркер и оригинальный текст перед маркером =======.