knp*_*wrs 12 diff merge wiki simultaneous
这总是在我的脑海里徘徊,所以我想我也可以继续问问.
wiki如何处理相同内容的多个编辑?
这是我要问的简单例子.假设页面包含以下内容:
我是一个页面!
现在让我们说两个人去编辑那个页面.每个人都加一句话:
第一人:
我是一个页面!
我是同一页的第二句话!
人二:
我是一个页面!
我是第二句话!
想象一下,每个人的第二句话是关于每个人想要添加的页面主题的同样相关但不同的事实.
现在让我们说第一个人在第二个人之前提交他们的更改,但是第二个人甚至没有机会看到那个人做出的改变.当他最终提交时,第二人的变化会覆盖第一人的变化吗?
是否有可用于此的差异/合并算法?
我相信维基百科使用了一种相当简单的差异/合并算法,类似于大多数源代码控制软件的做法.
在您给出的示例中,它会引发合并冲突错误,因为它无法知道最终标记中应该首先出现哪一行.保存更改的第二个人将显示合并错误页面,他们必须选择如何解决冲突.
但请记住,维基百科是并发用户规模的高端产品.对于大多数wiki来说,使用非常简单的"最后保存胜利"算法可能是可以接受的,其中第二人的编辑只是覆盖了第一个人的.随着历史的增加,第一个人应该很容易发现他们的更改已被覆盖并再次添加.
我相信这个解决方案是Stack Overflow使用的.SO还有一个额外的功能,即Ajax调用用于通知编辑器是否有其他人进来并在页面完成之前修改页面.