所以我一直在开发一个 wiki 类型的网站。我要决定的是合并两个用户同时编辑的文章的最佳算法。
到目前为止,如果两个不相关的区域被编辑,我正在考虑使用 Wikipedia 的方法来合并文档,但如果两个提交发生冲突,则丢弃旧的更改。
我的问题如下:如果我有原始文章,并且对其进行了两次更改,那么合并它们然后在出现冲突时处理冲突的最佳算法是什么?
Bill Ritcher 的优秀论文“ A Trustworthy 3-Way Merge ”讨论了商业 SCM 包使用的三路合并和巧妙解决方案的一些常见问题。
三向合并将自动应用每个版本的所有更改(不重叠)。诀窍是自动处理尽可能多的几乎重叠的区域。
本文对 diff3 算法进行了形式化分析,带有伪代码: http ://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf
它的标题是“A Formal Investigation of Diff3”,由雅虎的 Sanjeev Khanna、Keshav Kunal 和 Benjamin C. Pierce 撰写。
坦率地说,我会依赖 diff3。它几乎存在于每个 Unix 发行版上,您始终可以为 Windows 构建和捆绑一个 .EXE,以确保它可以满足您的目的。