Трехсторонние алгоритмы слияния для текста
Итак, я работал над сайтом типа wiki. Я пытаюсь решить, какой лучший алгоритм для объединения статьи, которая одновременно редактируется двумя пользователями.
до сих пор я рассматриваю возможность использования метода Википедии для объединения документов, если редактируются две несвязанные области, но отбрасываю старые изменения, если два фиксируют конфликт.
мой вопрос заключается в следующем: если у меня есть оригинальная статья и два изменения к ней, каковы лучшие алгоритмы объединять их, а затем иметь дело с конфликтами по мере их возникновения?
3 ответов
отличная статья Билла Ритчера"Надежное Трехстороннее Слияние " говорит о некоторых общих gotchas с трехсторонним слиянием и умными решениями для них, которые использовали коммерческие пакеты SCM.
3-way merge автоматически применит все изменения (которые не перекрываются) из каждой версии. Фокус в том, чтобы автоматически обрабатывать как можно больше почти перекрывающихся областей.
в этой статье есть формальный анализ алгоритма diff3 с псевдокодом: http://www.cis.upenn.edu / ~bcpierce / papers / diff3-short.pdf
Это называется "официальное расследование Diff3" и написана Санджив Кханна, Кешав Кунал, и Бенджамин С. Пирс от Yahoo.
честно говоря, я бы полагался на diff3. Это практически на каждом дистрибутиве Unix ,и вы всегда можете построить и связать.EXE для Windows, чтобы убедиться, что он существует для ваших целей.