同時編集のマージにウィキが使用する方法は何ですか?

StackOverflow https://stackoverflow.com/questions/223040

  •  03-07-2019
  •  | 
  •  

質問

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

次のようなソリューションが欲しい:

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

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

役に立ちましたか?

解決

TWiki は、同時編集

  

TWikiは、同じトピックの複数の同時編集を許可し、異なる変更を自動的にマージします。自動的にマージできない競合がない限り、おそらくこのことは気づかないでしょう。この場合、「変更マーク」を挿入するTWikiが表示される場合があります。あなたの編集と他人の編集との間の矛盾を強調するためにテキストに。これらの変更マークは、トピックの誰かと同じ部分を編集する場合にのみ使用され、テキストの外観、他人の編集内容、編集内容を示します。

     

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

開発中の機能からドキュメントも作成されました。振る舞います。

  

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

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

TWikiには、一定の期間内に同じユーザーによる後続のリビジョンを折りたたむStack Overflowと同様の機能があり、このマージの際に発生したバグ

  
      
  1. ユーザーAがトピックを編集します
  2.   
  3. ユーザーAはrev Nを保存します
  4.   
  5. ユーザーBはトピックを編集し、リビジョンNを選択します
  6.   
  7. ユーザーAはトピックを再度編集し、rev Nを選択します
  8.   
  9. ユーザーAは変更を保存します。 saveは、変更がReplceIfEditiedWithin内にあることを確認しますか?ウィンドウ、回転数は増加しません
  10.   
  11. ユーザーBが保存すると、コードは編集を開始してからディスクの回転数が変更されていないので、マージの必要性を検出しません。
  12.   

注目に値するのは、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.

リース用語はエンドユーザーではなく開発者のみを対象としていることに注意してください。

他のヒント

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

「ロック」を書くことができます;ユーザーのIDと時刻を含む他のデータベーステーブルで、「ロック」を削除します。 (理解していない人のための本当のロックではありません)その人が保存するかx分後に。

このように、誰かが編集しようとし、誰かがすでに編集している場合。メッセージは残り時間で表示されるか、他の誰かが現在投稿を編集していることを伝えるだけで表示できます。

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

競合が発生する可能性がある場合(たとえば、2人のユーザーが同じ段落を編集している場合)、両方のバージョンに定型文を単に表示するか、2番目以降の投稿者に投稿の内容が変更された可能性があることを通知する必要があります彼らが提出したもの。

さて、それはひどい、ひどいアイデアになると思います。正直に言うと、マージはコードではかなり危険であり、少なくとも分離される可能性のある要素があります。これをしないでください-人間の知性は常に良くなります。代わりに、自動ソリューションで置き換えようとしているため、結果が正しくない結果になる可能性があり、メリットはありません。

TWikiの回答を調査する際に、 SynchroEdit を偶然見つけました。これは SubEthaEdit スタイルのブラウザーベースの同時マルチユーザーエディター。 2007年9月頃に見捨てられたようですが、ダウンロード可能なソースコードがあります。

文書化のために: DokuWiki は、編集されたページに15分間のロックを設定します。編集内容をプレビューします(プレビューまたは編集開始から15分)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top