wiki使用哪些方法来合并并发编辑?

时间:2008-10-21 18:55:21

标签: wiki merge

如果两个用户编辑相同的wiki主题,那么在wiki(或类似的协作编辑软件)中使用了哪些方法将第二个用户的编辑与第一个编辑合并?

我想要一个解决方案:

  • 不需要锁定
  • 不会丢失任何页面添加内容。
  • 它可能会添加额外的“样板文本”以指示进行了哪些不同的更改。

(我对可用于实现堆栈溢出this uservoice idea的解决方案感兴趣。)

7 个答案:

答案 0 :(得分:3)

TWiki会自动合并Simultaneous Edits

  

TWiki允许对同一主题进行多个同时编辑,然后自动合并不同的更改。除非存在无法自动合并的冲突,否则您可能甚至不会注意到这种情况。在这种情况下,您可能会看到TWiki在文本中插入“更改标记”以突出显示您的编辑与其他人之间的冲突。这些更改标记仅在您将主题的相同部分编辑为其他人时使用,并且它们指示文本的外观,其他人的编辑内容以及您的编辑内容。

     

如果您尝试编辑其他人正在编辑的主题,TWiki会发出警告。如果在保存期间需要合并,它也会发出警告。

该特征中还有一些documentation正在开发,详细说明它的行为方式。

  

我在编写合并算法时使用的基本原则是:

     
      
  1. 如果可以在不使用冲突标记的情况下进行合并,请执行此操作。
  2.   
  3. 如果可以使用冲突标记进行合并,请执行此操作。
  4.   
  5. 如果无法合并,则最近的签到会获胜。
  6.   

值得注意的是,TWiki具有与Stack Overflow类似的功能,可以在同一时间限制内折叠同一用户的后续修订版本caused a bug when happening in conjunction with a merge

  
      
  1. 用户A编辑主题
  2.   
  3. 用户A保存rev N
  4.   
  5. 用户B编辑主题,选择rev N
  6.   
  7. 用户A再次编辑主题,选择rev N
  8.   
  9. 用户A保存更改;保存看到更改是在ReplceIfEditiedWithin中?窗口,所以不增加转数
  10.   
  11. 用户B保存,代码看到光盘上的转数自开始编辑后未发生变化,因此无法检测是否需要合并。
  12.   

另外值得注意的是,TWiki会警告第二个用户正在编辑主题:

  

所以我发明了“租约”的概念。编辑主题时,会在一段固定的时间内(默认为1小时)对主题进行租约。如果其他人试图编辑,他们会被告知已经有关于该主题的租约,但这并不能阻止他们进行编辑。它不是一个锁,它只是一种建议他们的方式。合并仍然是主要的解决机制;租约纯属咨询。如果某个用户 - 或者一个插件 - 选择退出某个主题,因为某人有一个租约,那么,这取决于该插件。

     

TWiki.cfg中的描述性评论如下:

   # When a topic is edited, the user takes a "lease" on that topic.
   # If another user tries to also edit the topic while the lease
   # is still active, they will get a warning. The warning text will
   # be different depending on whether the lease has "expired" or
   # not i.e. if it was taken out more than LeaseLength seconds ago.

请注意,租赁术语仅适用于开发人员,而非最终用户。

答案 1 :(得分:2)

我对大多数Wiki软件(例如MediaWiki)的体验是它跟踪您正在编辑的文档的版本。如果在编辑时更改了文档,则会拒绝您的更改,并提示您执行手动合并。

答案 2 :(得分:0)

您可以在其他数据库表中使用用户ID和时间写一个“锁”,并在该人保存时删除“锁定”(对于那些不理解的人而言,这不是真正的锁定) x分钟后。

这样,当有人尝试编辑时,有人已经在编辑。通过告诉其他人当前正在编辑帖子,可以显示剩余时间的消息。

答案 3 :(得分:0)

好吧,您可以使用合并算法,就像源控制软件使用的算法一样。您可能希望检查段落级别的更改,以帮助保持可读性。

如果存在潜在冲突(例如,两个用户编辑同一段落),您可能需要简单地使用样板文本呈现两个版本和/或通知第二个及后续提交者他们的帖子内容可能已从他们提交了什么。

答案 4 :(得分:0)

现在好吧,我认为这将是一个可怕的,可怕的想法。说实话:合并在代码中非常冒险,至少有可能被隔离的元素。不要这样做 - 人类的智慧总会更好。相反,你试图用自动解决方案替换它,这可能导致输出不健全,没有任何好处。

答案 5 :(得分:0)

在研究TWiki的答案时,我偶然发现了SynchroEdit,这似乎是一个SubEthaEdit样式的基于浏览器的同时多用户编辑器。看起来它可能在2007年9月左右被遗弃了,但是有源代码可供下载。

答案 6 :(得分:0)

为了便于记录:DokuWiki对已编辑的页面设置了15分钟的锁定,每当您预览编辑时(即从预览或编辑开始的15分钟),它都会被更新。