マージモデルは、GeneXus Server の
バージョン管理モデルの 1 つです。
このモードでは、各 GeneXus 開発者が
GeneXus Server からナレッジベースを作成する操作によって、同じ GeneXus Server インスタンスからナレッジベースを作成し、それぞれのプライベートコピーを変更します。
すべての変更が完了したら、GeneXus Server 上のナレッジベースに各ユーザーのプライベートコピーがマージされます。
ユーザー A と
ユーザー B が、それぞれ同じ GeneXus Server ナレッジベースの作業コピーを作成するものとします。これらのユーザーは同時に作業し、各自のローカルコピー内の
同じオブジェクトを変更します。
ユーザー B は、
ユーザー A より先にリポジトリに変更を保存します。そのため、
ユーザー A が変更を保存しようとすると、GeneXus Server ナレッジベース内の
オブジェクトが前回の
更新操作以降に変更されていることを知らせるメッセージが表示されます。
それを受けて、
ユーザー A は、
更新を実行して最新のリビジョンをローカルに取得するか、
オブジェクトを元に戻す操作を実行する必要があります。
========== Commit started ==========
Contacting GeneXus Server at 'http://<GeneXus Server のパス>/<GeneXus Server の名前>'... done!
Exporting Transaction 'Country'...
Exporting Attribute 'CountryName'...
Compressing output file...
Export File Created At: 'C:\Users\<ユーザー>\AppData\Local\Temp\tmp98E3.xpz'
GeneXus Server: Commit to version TravelAgency of KB 'TravelAgency' sent by Local\admin
GeneXus Server: Comments:Country modifications.
GeneXus Server: Processing file...
GeneXus Server: Checking Import References......Finished
GeneXus Server: Reading import file objects......Finished
GeneXus Server: Commit Attribute 'CountryName'...
GeneXus Server: Successful
warning: GeneXus Server: Commit failed: At least Transaction 'Country' was
modified in GeneXus Server since your last update.
Please Update the Knowledge Base and retry.
error: GeneXus Server: Could not commit changes
Commit Failed
更新操作では、GeneXus によってサーバー側のオブジェクトのリビジョンとクライアント側のオブジェクトのリビジョンのマージ操作が試行されます。
結果として、2 つのシナリオが考えられます:
1) ユーザー B の変更がユーザー A の変更と重複しない場合。
この場合、両方の変更がローカルのナレッジベースの新しいリビジョンにマージされます:
========== Partial Update started ==========
Updating Attribute 'Country'...Successful
Updating Transaction 'Country'...Changes to Transaction 'Country' successfully merged
(Transaction 'Country', View differences)
Successful
Updating table information...
Reloading Transaction 'Country'...Done
Partial Update Success
ローカルでのマージが正常に実行された後、新たに
コミット操作を実行して、GeneXus Server のオブジェクトを更新する必要があります。
2) ユーザー B の変更がユーザー A の変更と重複する場合。
このような状況を
競合 (コンフリクト) と呼びます。サーバー側ステータスの新しいリビジョンがローカルのナレッジベースに作成されます:
========== Partial Update started ==========
Updating Attribute 'CountryName'...'CountryName' renamed to 'CountryInitialsName'
warning: Conflict in Attribute 'CountryName'.The object was updated with the server revision.
Compare with the previous revision and solve the conflict manually (Attribute 'CountryName', View differences)
Successful
Partial Update Success
ユーザーは
競合を手動で解決する必要があります。具体的には、両方の変更を確認し、それらの変更を手動で再適用して、ローカルのナレッジベースに新しいリビジョンを生成します。ユーザーが変更の重複を手動で解決した後、改めて
コミット操作を実行して、GeneXus Server のオブジェクトを更新する必要があります。
ロックモデル
GeneXus Server - 競合とその解決方法