8

2 人のユーザーが同じウィキ トピックを編集する場合、2 番目のユーザーの編集を最初のユーザーの編集とマージするために、ウィキ (または同様の共同編集ソフトウェア) でどのような方法が使用されていますか?

次のような解決策が必要です。

  • ロックを必要としない
  • ページへの追加は失われません。
  • 異なる変更が行われた場所を示すために、余分な「ボイラープレート」テキストを追加する場合があります。

(スタック オーバーフローに対するこのユーザーボイスのアイデアを実装するために使用できるソリューションに興味があります。)

4

7 に答える 7

3

TWikiは自動的に同時編集をマージします。

TWikiでは、同じトピックを複数回同時に編集してから、異なる変更を自動的にマージできます。自動的にマージできない競合がない限り、おそらくこれが発生していることに気付くことさえありません。この場合、TWikiがテキストに「変更マーク」を挿入して、自分の編集と他の人の編集との競合を強調しているのを目にするかもしれません。これらの変更マークは、トピックの同じ部分を他の人と同じ部分を編集する場合にのみ使用され、テキストがどのように表示されたか、他の人の編集がどのようなものであったか、およびあなたの編集が何であったかを示します。

他の誰かが編集しているトピックを編集しようとすると、TWikiは警告を発します。保存中にマージが必要かどうかも警告されます。

また、開発中のその機能から、それがどのように動作するかを詳述したいくつかのドキュメントがありました。

マージアルゴリズムのコーディングに使用した基本原則は次のとおりです。

  1. 競合マーカーを使用せずにマージできる場合は、そうしてください。
  2. 競合マーカーを使用してマージできる場合は、そうします。
  3. マージできない場合は、最新のチェックインが優先されます。

TWikiにはStackOverflowと同様の機能があり、同じユーザーによる後続のリビジョンを特定の制限時間内に折りたたむことができます。これにより、マージと組み合わせて発生したときにバグが発生しました

  1. ユーザーAがトピックを編集します
  2. ユーザーAがrevNを保存
  3. ユーザーBがトピックを編集し、revNを取得します
  4. ユーザーAがトピックを再度編集し、revNを取得します
  5. ユーザーAは変更を保存します。保存すると、変更がReplceIfEditiedWithin内にあることがわかりますか?ウィンドウなので、回転数をインクリメントしません
  6. ユーザーBが保存すると、コードは、編集を開始してからディスクの回転数が変更されていないことを確認しているため、マージの必要性を検出しません。

また、TWikiはトピックが編集されていることを2番目のユーザーに警告することも注目に値します。

そこで私は「リース」の概念を発明しました。トピックが編集されると、一定期間(デフォルトは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 に答える
3

ほとんどの Wiki ソフトウェア (MediaWiki など) での私の経験では、編集中のドキュメントのバージョンを追跡します。編集中にドキュメントが変更された場合、変更は拒否され、手動でマージを実行するように求められます。

于 2008-10-21T19:00:04.980 に答える
0

さて、それはひどい、ひどい考えだと思います。正直に言うと、マージはコードではかなり厄介であり、少なくとも分離される可能性のある要素が含まれています。これをしないでください-人間の知性は常により良いでしょう。代わりに、それを自動ソリューションに置き換えようとしています。これにより、出力が正常ではなく、利益が得られない可能性があります。

于 2008-10-21T22:07:42.480 に答える
0

文書化のため: DokuWikiは編集済みページに 15 分間のロックを設定します。このロックは、編集をプレビューするたびに更新されます (つまり、プレビューまたは編集開始から 15 分)。

于 2009-01-05T05:14:25.220 に答える
0

ユーザーのIDと時間を使用して他のデータベーステーブルに「ロック」を書き込み、ユーザーが保存したときまたはx分後に「ロック」を削除できます(理解していない人にとっては実際のロックではありません) .

このように、誰かが編集しようとしていて、誰かがすでに編集している場合。残り時間とともに、または他の誰かが現在投稿を編集中であることを知らせるメッセージが表示されます。

于 2008-10-21T18:59:55.807 に答える
0

ソース管理ソフトウェアで使用されるようなマージ アルゴリズムを使用できます。読みやすさを維持するために、段落レベルで変更をチェックするようにしたいでしょう。

衝突の可能性がある場合 (たとえば、2 人のユーザーが同じ段落を編集している場合) は、両方のバージョンのボイラープレート テキストを単純に提示するか、2 番目以降の投稿者に投稿内容が投稿内容から変更されている可能性があることを通知する必要があります。 .

于 2008-10-21T19:16:25.257 に答える
0

TWiki の回答を調べているときに、SubEthaEditスタイルのブラウザーベースの同時マルチユーザー エディターのように見えるSynchroEditにも出くわしました。2007 年 9 月頃に放棄されたようですが、ダウンロード可能なソース コードがあります。

于 2008-10-21T22:08:38.203 に答える