代码之家  ›  专栏  ›  技术社区  ›  Sam Hasler

Wiki使用什么方法合并并发编辑?

  •  7
  • Sam Hasler  · 技术社区  · 16 年前

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

    我想要一个解决方案:

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

    this uservoice idea

    7 回复  |  直到 16 年前
        1
  •  3
  •   64BitBob    16 年前

        2
  •  3
  •   Sam Hasler    16 年前

    TWiki 自动合并 Simultaneous Edits .

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

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

    documentation 根据正在开发的功能,详细说明其行为。

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

    1. 如果可以使用冲突标记进行合并,请这样做。

    caused a bug when happening in conjunction with a merge .

    1. 用户编辑主题
    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.
    

        3
  •  0
  •   Patrick Desjardins    16 年前

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

        4
  •  0
  •   AaronSieb    16 年前

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

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

        5
  •  0
  •   Marcin    16 年前

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

        6
  •  0
  •   Sam Hasler    16 年前

    在研究TWiki的答案时,我也偶然发现 SynchroEdit SubEthaEdit

        7
  •  0
  •   Grey Panther    15 年前

    为了便于记录: DokuWiki 在编辑的页面上放置15分钟的锁定,每当您预览编辑内容时(即从预览或编辑开始后15分钟),该锁定就会更新。