TWikiは自動的に同時編集をマージします。
TWikiでは、同じトピックを複数回同時に編集してから、異なる変更を自動的にマージできます。自動的にマージできない競合がない限り、おそらくこれが発生していることに気付くことさえありません。この場合、TWikiがテキストに「変更マーク」を挿入して、自分の編集と他の人の編集との競合を強調しているのを目にするかもしれません。これらの変更マークは、トピックの同じ部分を他の人と同じ部分を編集する場合にのみ使用され、テキストがどのように表示されたか、他の人の編集がどのようなものであったか、およびあなたの編集が何であったかを示します。
他の誰かが編集しているトピックを編集しようとすると、TWikiは警告を発します。保存中にマージが必要かどうかも警告されます。
また、開発中のその機能から、それがどのように動作するかを詳述したいくつかのドキュメントがありました。
マージアルゴリズムのコーディングに使用した基本原則は次のとおりです。
- 競合マーカーを使用せずにマージできる場合は、そうしてください。
- 競合マーカーを使用してマージできる場合は、そうします。
- マージできない場合は、最新のチェックインが優先されます。
TWikiにはStackOverflowと同様の機能があり、同じユーザーによる後続のリビジョンを特定の制限時間内に折りたたむことができます。これにより、マージと組み合わせて発生したときにバグが発生しました。
- ユーザーAがトピックを編集します
- ユーザーAがrevNを保存
- ユーザーBがトピックを編集し、revNを取得します
- ユーザーAがトピックを再度編集し、revNを取得します
- ユーザーAは変更を保存します。保存すると、変更がReplceIfEditiedWithin内にあることがわかりますか?ウィンドウなので、回転数をインクリメントしません
- ユーザー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.
リースの用語は開発者専用であり、エンドユーザー向けではないことに注意してください。