Какова версия diff для git? diff2 или diff3?

У кого-нибудь есть подсказка, какая версия diff используется в git?

В этой статье, например, подробно объясняется алгоритм сравнения для чайников, но какой алгоритм используется в действительности?

Для общего знания здесь спецификации для diff2 & diff3,

Я знаю, что вы можете настроить GIT для использования diff2 или же diff3

git config --global merge.conflictstyle diff3

2 ответа

Решение

Вы, кажется, путаете 3 разные вещи

  1. Инструмент командной строки Unix diff3 предоставлено GNU diffutils
  2. Формат вывода diff, который предоставляет git (в котором diff3 опция не по умолчанию)
  3. Алгоритм, который 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", добавляет ||||||| маркер и оригинальный текст перед маркером =======.

Другие вопросы по тегам