Трехсторонние алгоритмы слияния для текста

Итак, я работал над сайтом типа wiki. Я пытаюсь решить, какой лучший алгоритм для объединения статьи, которая одновременно редактируется двумя пользователями.

до сих пор я рассматриваю возможность использования метода Википедии для объединения документов, если редактируются две несвязанные области, но отбрасываю старые изменения, если два фиксируют конфликт.

мой вопрос заключается в следующем: если у меня есть оригинальная статья и два изменения к ней, каковы лучшие алгоритмы объединять их, а затем иметь дело с конфликтами по мере их возникновения?

3 ответов


отличная статья Билла Ритчера"Надежное Трехстороннее Слияние " говорит о некоторых общих gotchas с трехсторонним слиянием и умными решениями для них, которые использовали коммерческие пакеты SCM.

3-way merge автоматически применит все изменения (которые не перекрываются) из каждой версии. Фокус в том, чтобы автоматически обрабатывать как можно больше почти перекрывающихся областей.


в этой статье есть формальный анализ алгоритма diff3 с псевдокодом: http://www.cis.upenn.edu / ~bcpierce / papers / diff3-short.pdf

Это называется "официальное расследование Diff3" и написана Санджив Кханна, Кешав Кунал, и Бенджамин С. Пирс от Yahoo.


честно говоря, я бы полагался на diff3. Это практически на каждом дистрибутиве Unix ,и вы всегда можете построить и связать.EXE для Windows, чтобы убедиться, что он существует для ваших целей.