Merge wiki如何处理多个同时编辑?

Merge wiki如何处理多个同时编辑?,merge,diff,wiki,simultaneous,Merge,Diff,Wiki,Simultaneous,这一直萦绕在我的脑海里,所以我想我还是继续问吧 wiki如何处理对同一内容的多个编辑 这里有一个简单的例子来说明我的问题。假设页面具有以下内容: 我是一页 现在让我们假设两个人去编辑那个页面。每个人加上一句话: 第一人: 我是一页 我是同一页的第二句话 第二个人: 我是一页 我是第二句话 假设每个人的第二句话都是关于每个人想要添加的页面主题的一个同等相关但不同的事实 现在让我们假设第一个人在第二个人之前提交了他们的更改,但是第二个人甚至没有机会看到第一个人所做的更改。当第二个人最终提交时,他的更

这一直萦绕在我的脑海里,所以我想我还是继续问吧

wiki如何处理对同一内容的多个编辑

这里有一个简单的例子来说明我的问题。假设页面具有以下内容:

我是一页

现在让我们假设两个人去编辑那个页面。每个人加上一句话:

第一人:

我是一页
我是同一页的第二句话

第二个人:

我是一页
我是第二句话

假设每个人的第二句话都是关于每个人想要添加的页面主题的一个同等相关但不同的事实

现在让我们假设第一个人在第二个人之前提交了他们的更改,但是第二个人甚至没有机会看到第一个人所做的更改。当第二个人最终提交时,他的更改是否覆盖了第一个人的更改


是否有一种diff/merge算法可用于此目的?

可能有一种事务机制,使用锁定来防止文件被编辑两次。请参阅Wikipedia。

这取决于wiki的风格。有几十个或数百个维基克隆。通常,第二个用户将收到“此页面已被其他用户编辑”错误消息,然后他们必须重新加载页面并重新进行编辑

wiki当然可以像Subversion这样的版本控制系统一样将这两个编辑合并在一起。如果您熟悉UNIX
patch
命令,它将涉及区分用户2的编辑并生成一个补丁,然后应用该补丁。补丁可能会成功,也可能不会成功;在您的示例中,会出现合并冲突,因此会返回到旧的“此页面已被其他用户编辑,您丢失”错误消息。

我相信Wikipedia使用的算法与大多数源代码控制软件使用的算法类似

在您给出的示例中,它将引发合并冲突错误,因为它无法知道在最终标记中哪一行应该排在第一位。保存更改的第二个人将看到一个合并错误页面,他们必须选择如何解决冲突

但请记住,维基百科处于并发用户规模的高端。对于大多数维基来说,使用非常简单的“最后一次保存获胜”算法可能是可以接受的,第二个人的编辑只会覆盖第一个人的编辑。随着历史的增加,第一个人应该很容易发现他们的更改已被覆盖并再次添加

我相信这个解决方案就是堆栈溢出所使用的。因此,还有一个额外的特性,即如果有人进来并在页面完成之前修改页面,则使用Ajax调用通知编辑器

wiki如何处理多个同时编辑

这取决于wiki的实现

是否有一种差异/合并算法可用于此

任何符合您要求的合并算法都可以

一般来说,这取决于你喜欢维基的行为。例如,您可以选择这样一种方式来实现您的wiki:由于文章已被修改,并且第二个人正在处理过时的基本副本,因此不会提交第二个人的更改。如果第二个人意识到这些变化,他/她可能会输入完全不同的内容。在这种情况下,您可以选择不允许提交第二个人的更改。这可以通过Kurt Du Bois在回答中提到的事务机制来实现

另一个选择是实现一种始终允许保存wiki文章的方法。在这种情况下,您可能会丢失第一个人的变化,而在第一种方法中,您将丢失第二个人的变化

第三种方法是在合并窗口中同时显示这两篇文章。我不知道有哪个维基支持这一点。如果是这样,我想知道如果同时有三个(或更多)人修改同一个文档会发生什么

因此,如果您使用的是wiki,我建议您尽量减少编辑


如果您正在实现wiki,您可以选择希望wiki系统的行为方式。

hehe并发编程数据危害总是很有趣:)我的经验不同。对于我使用过的大多数维基,它只是“第一次保存胜利”。第二个必须刷新(通常会丢失更改,除非手动保存),然后重新应用更改。但是,正如您所指出的,这实际上取决于底层的Wiki引擎。