最近のアクセス:
GeneXus Server - 競合とその解決方法

競合 (コンフリクト) とは何か、その解決方法、そして解決のためのツールについて説明します。

競合とは

GeneXus や GeneXus Server をマージモデルで使用する場合、複数の開発者が同じオブジェクトに変更を加えると、競合が発生する可能性があります。
競合は、ある開発者が加えた変更が、別の開発者が加えた変更と重複した場合に発生します。ほとんどの場合、競合は自動的に解決する方法がないため、開発者が手動で解決する必要があります。

競合の発生を確認する方法

競合は、更新操作の実行中に発生します。
========== Partial Update started ==========
Updating Attribute 'CountryInitialsName'...'ShortCountryName' renamed to 'CountryInitialsName'
warning: Conflict in Attribute 'CountryInitialsName'. The object was updated with the server revision. 
Compare with the previous revision and solve the conflict manually (Attribute 'CountryInitialsName', View differences)
Successful
Partial Update Success
[ 更新 ] ダイアログの [ 結果 ] タブにも警告が表示されます。
イメージ:32260.png
注: 「The object was updated with the server revision. (オブジェクトはサーバーのリビジョンに更新されました)」とは、GeneXus Server で競合が見つかった場合、サーバー側と同じステータスの新しいリビジョンがローカルのナレッジベースに作成されることを意味します。
競合するオブジェクトは、競合が解決されるまで、 [ 保留中のコミット ] リストに赤色で残されます。
イメージ:32261.png

競合の解決方法

これには次の 3 つ方法があります:
  1. マージ: これが最も一般的な方法で、ローカルで加えた変更とサーバー側での変更をマージします。この方法では、開発者が手動で競合を解決する必要があります。そのためには、競合する変更を両方確認し、変更をローカルで手動で再適用することで、ローカルのナレッジベースにオブジェクトの新しいリビジョンを生成します。
    手動マージが完了したら、開発者はコミット操作を新たに実行し、GeneXus Server リポジトリ内のオブジェクトを更新できます。
     
  2. ローカルでの変更のみを維持: 開発者が、ローカルで加えた変更が含まれるバージョンまでリビジョンを復元してから ( [ 履歴 ] でコンテキストメニューの [ アクティブとして指定 ] または [ このリビジョンに戻す ] を使用)、オブジェクトを GeneXus Server にコミットします。
     
  3. サーバー側の変更のみを維持: 競合を解決済みとしてマークします。そのためには、 [ コミット ] ダイアログを開き、オブジェクトを右クリックして、 [ 解決済みとしてマーク ] オプションを選択します。
イメージ:32262.png
注: 解決済みとしてマークされていない競合を開発者がコミットに追加しようとすると、チーム開発の出力に次の警告が表示されます。
warning: Resolve Attribute 'CountryInitialsName' conflict before committing it.

ツール

変更を手動でマージする作業の負担を軽減するために、GeneXus には次のツールが用意されています。

比較機能

1) 履歴と変更点: 両方の変更点 (開発者がローカルで行ったものと、サーバー側で行われたもの) を確認するには、オブジェクトの履歴を開きます。
最後のリビジョン (更新で作成されたリビジョンの前) を選択し、 [ 現在のリビジョンと比較 ] オプションを選択します。または、更新後にオブジェクトが変更された場合は、 [ 比較対象となる左側を選択 ] オプションでリビジョンを選択し、 [ <オブジェクト名> リビジョン:<リビジョン番号> と比較 ] を選択します。
イメージ:32264.png

注: ローカルで行われた変更のみを維持するか、それよりも前のリビジョンを復元するには、 [ アクティブとして指定 ] オプションまたは [ このリビジョンに戻す ] オプションを使用できます。
2) 保留中のコミット: [ コミット ] ダイアログで、競合しているオブジェクトを右クリックすると、次の比較が可能です。

イメージ:32265.png

各項目の説明:
  • コンフリクト発生前の変更を表示: 比較機能が開き、最後の更新の前に同期されたオブジェクト更新前のリビジョン (最後の更新前に開発者がローカルで行った変更) と比較されます。
  • リモートの変更を表示: 比較機能が開き、最後の更新の前に同期されたオブジェクトのリビジョンが、更新直後のリビジョン (ほかの開発者がサーバー側オブジェクトに対して行った変更) と比較されます。
  • コンフリクトの解決方法を表示: 比較機能が開き、更新直前のリビジョンが、更新直後のリビジョン (サーバー側オブジェクトの変更 (競合の原因となった変更) を開発者がローカルで適用したもの) と比較されます。
注: オブジェクトのマージに成功すると (ローカルで行われた変更とサーバー側での変更で競合がない状態)、 [ 保留中のコミット ] の表示が緑になります。

参考情報







サブページ
Created: 15/01/07 22:49 by Admin Last update: 20/12/25 00:25 by Admin
カテゴリ
Powered by GXwiki 3.0