8

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

我想要一个解决方案:

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

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

4

7 回答 7

3

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

于 2008-10-21T19:00:04.980 回答
3

TWiki自动合并同步编辑

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

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

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

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

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

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

  1. 用户 A 编辑主题
  2. 用户 A 保存 rev N
  3. 用户 B 编辑主题,选择 rev N
  4. 用户 A 再次编辑主题,选择 rev 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.

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

于 2008-10-21T21:28:46.270 回答
0

您可以在其他数据库表中使用用户的 ID 和时间编写“锁”,并在该人保存时或 x 分钟后删除“锁”(对于不理解的人来说,这不是真正的锁) .

这样,当有人尝试编辑并且有人已经在这样做时。一条消息可以显示剩余时间,或者只是告诉其他人当前正在编辑帖子。

于 2008-10-21T18:59:55.807 回答
0

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

如果存在潜在冲突(例如,两个用户编辑同一段落),您可能需要简单地展示两个版本以及样板文本和/或通知第二个和后续提交者他们的帖子内容可能与他们提交的内容有所不同.

于 2008-10-21T19:16:25.257 回答
0

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

于 2008-10-21T22:07:42.480 回答
0

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

于 2008-10-21T22:08:38.203 回答
0

出于文档考虑:DokuWiki对已编辑的页面设置了 15 分钟的锁定,每当您预览您的编辑时(即从您的预览或编辑开始后 15 分钟),该锁定就会更新。

于 2009-01-05T05:14:25.220 回答