Я помню, как читал некоторое время назад, что слияние CVS на самом деле использует алгоритм diff3 для выполнения слияния.
Эта статья в PDF Официальное исследование Diff3, выполненное Сандживом Ханной, Кешавом Куналом и Бенджамином С. Пирсом * из Университета Пенсильвании , подробно описывает алгоритм diff3.
Если основное внимание уделяется свойствам самого алгоритма слияния, а не тому, как он интегрируется с CVS.
В ответ на ваши вопросы:
Метка, дата осведомленности
со справочной страницы CVS:
-j tag [: date] Объединить изменения из ревизий, указанных тегом или, когда
дата указана, а метка является веткой
тег, версия из тега ветки
как оно существовало на дату
2-х или 3-х сторонняя и текстовая / бинарная осведомленность
diff3 по умолчанию представляет собой простой текстовый diff. Сравнивает (различает) 3 версии файла.
со страницы руководства diff3:
Если `diff3 'считает, что любой из
файлы, которые он сравнивает, являются двоичными (
нетекстовый файл), обычно
ошибка, потому что такие сравнения
обычно не полезно. Как и в случае с «diff»,
Вы можете заставить 'diff3' рассмотреть все
файлы должны быть текстовыми файлами и сравнить
они строка за строкой, используя '-a' или
Опции '--text'.
Базовая версия при сравнении
Базовая версия, согласно связанной статье, является последней общей версией (O) между двумя текущими версиями файла (A и B). Сначала он использует алгоритм двухстороннего сравнения, чтобы найти самые длинные общие подпоследовательности между O и A, а также O и B.
Тогда (цитата из статьи) это:
... берет регионы, где O
отличается от А или В и
объединяет те, которые перекрываются,
приводя к чередующейся последовательности
стабильный (все реплики равны) и
нестабильный (одна или обе реплики
изменено) фрагменты показаны на рисунке 1 (с) .3
Наконец, он изучает, что изменилось
в каждом куске и решает, что изменится
может распространяться, как показано на рисунке
1 (d) - здесь, второй кусок изменен
только в A (вставив 4, 5), так что это
изменение может быть распространено на B, но
четвертый кусок имеет изменения как в А, так и
B, так что ничего нельзя распространять.