14

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

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

这是我要问的一个简单示例。假设一个页面具有以下内容:

我是一页!

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

人一:

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

人物二:

我是一页!
我是第二句话!

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

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

是否有可用于此的差异/合并算法?

4

4 回答 4

11

我相信 Wikipedia 使用了一种相当简单的 diff/merge算法,类似于大多数源代码控制软件的做法。

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

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

我相信这个解决方案就是 Stack Overflow 使用的。SO 有一个附加功能,如果其他人进来并在他们完成之前修改页面,则使用 Ajax 调用通知编辑器。

于 2010-08-05T05:10:41.380 回答
3

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

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

于 2010-08-05T05:09:51.177 回答
1

可能存在使用锁定来防止文件被编辑两次的事务机制。请参阅Wikipedia 上的文件锁定

于 2010-08-05T05:09:02.113 回答
1

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

这取决于 wiki 的实现。

是否有可用于此的差异/合并算法?

任何满足您要求的合并算法都可以。

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

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

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

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

如果你正在实现一个 wiki,你可以选择你希望你的 wiki 系统如何运行。

于 2010-08-05T05:16:47.790 回答