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

Sam*_*ler 7 merge wiki

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

我想要一个解决方案:

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

(我对可用于实现堆栈溢出的用户语音想法的解决方案感兴趣.)

Sam*_*ler 3

TWiki自动合并同步编辑

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

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

还有一些来自该功能的文档正在开发中,详细说明了它的行为方式。

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

  1. 如果可以在不使用冲突标记的情况下进行合并,请这样做。
  2. 如果可以使用冲突标记进行合并,请这样做。
  3. 如果无法合并,则最近签入的获胜。

值得注意的是,TWiki 有一个与 Stack Overflow 类似的功能,可以在一定的时间限制内折叠同一用户的后续修订,这在与合并一起发生时会导致错误

  1. 用户A编辑主题
  2. 用户 A 保存了版本 N
  3. 用户 B 编辑主题,获取版本 N
  4. 用户 A 再次编辑主题,获取版本 N
  5. 用户A保存更改;save 看到更改是在 ReplceIfEditiedWithin 内吗?窗口,因此不会增加转速
  6. 用户 B 保存,代码发现光盘上的版本号自开始编辑以来没有更改,因此没有检测到合并的需要。

另外值得注意的是,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.
Run Code Online (Sandbox Code Playgroud)

请注意,租赁术语仅适用于开发商,不适用于最终用户。