コンフリクトの解消
概要
同一のプロジェクトを異なるブランチで変更していた場合、ブランチをマージした際にコンフリクトが発生することがあります。
NDGitでは、プロジェクトファイルのコンフリクトの解決を支援する機能を提供しています。
コンフリクト箇所毎に個別に選択する
適用する変更をコンフリクト箇所毎に個別に選択してコンフリクトを解決するには、次の手順で行います。
コンフリクト箇所毎の解消はEnterprise Editionで利用できます。
Professional Editionでは、後述するモデルファイル毎に一括で選択するでコンフリクトを解消してください。
- コンフリクトを解決したいファイルをマウスオーバーします。
- [コンフリクトの分析] ボタンをクリックすると、[コンフリクトの分析] ウィンドウが表示されます。
- ウィンドウ内で⛔アイコンをマウスホバーすると、コンフ リクトのメッセージが表示されます。(メッセージの詳細はこちら)
- コンフリクトしている箇所を選択して、以下のいずれかの操作で優先する変更内容を選択します。
- マージしたブランチの変更を適用するには、[左を適用] ボタンをクリックします。
- 起点のブランチの変更を適用するには、[右を適用] ボタンをクリックします。
- 全てのコンフリクトを解決したら、[保存して閉じる] ボタンをクリックして変更内容を確定させます。
- [適用の取り消し] ボタンをクリックすることで、適用した変更を取り消すことができます。
- フィールド値が文字列の場合、[テキストをマージ] ボタンをクリックすることで、相手側、自分側の変更をテキストマージした内容を変更後として適用することができます。
- [ナビゲータで選択] ボタンをクリックすると、[コンフリクトの分析] ウィンドウで選択中のモデルの変化点を Next Design のエディタ上で確認することができます。
モデルファイル毎に一括で選択する
適用する変更をモデルファイル毎に一括で選択してコンフリクトを解決するには、次の手順で行います。
- コンフリクトを解決したいファイルを選択して、コンテキストメニューを開きます。
- 以下のいずれかの操作で優先する変更内容を選択します。
- マージしたブランチの変更を適用するには、[相手の変更を適用する] ボタンをクリックします。
- 起点のブランチ の変更を適用するには、[自分の変更を適用する] ボタンをクリックします。
コンフリクトのパターン一覧
ブランチをマージしたときに発生しうる全コンフリクトを示します。 また、それらのコンフリクトが発生する操作例および、解決方法を示します。
No. | カテゴリ | コンフリクトのメッセージ |
---|---|---|
1 | モデル共通 | 削除する要素の属性[属性名 ]を変更しています。 |
2 | モデル共通 | 属性[属性名 ]が相互編集されています。 |
3 | モデル共通 | 所有関連が循環しています。 |
4 | モデル共通 | モデル名 を所有する所有関連が複数あります。 |
5 | モデル(プロダクトライン) | 複数の条件式モデルが設定されています。 |
6 | モデル(シーケンス図) | シーケンス図が相互編集されています。 |
7 | プロファイル共通 | プロファイルが相互編集されています。 |
対処方法
- 削除する要素の属性[
属性名
]を変更しています。
属性名
]を変更しています。発生条件
片方のコミットでモデルを削除する一方、もう片方のコミットでそのモデルのフィールドを更新すると、コンフリクトが発生します。
対処方法
モデルの削除、またはモデルのフィールド変更のうち適用したい側の変更を選択します。
- 属性[
属性名
]が相互編集されています。
属性名
]が相互編集されています。発生条件
片方のコミットでモデルのフィールドを更新する一方、もう片方のコミットで同じフィールドを違う値に更新すると、コンフリクトが発生します。
対処方法
適用したい側のモデルのフィールド変更を選択します。
- 所有関連が循環しています。
発生条件
片方のコミットでモデルの親を変更する一方、もう片方のコミットで親子関係が逆になるように親を変更を追加すると、コンフリクトが発生します。
対処方法
モデルの所有関連が循環しないようにする必要があります。 所有関連が循環しないように適用方向を指定してください。
モデル名
を所有する所有関連が複数あります。
モデル名
を所有する所有関連が複数あります。発生条件
片方のコミットでモデルファイルのインポートによりモデルを追加する一方、もう片方のコミットで同じモデルファイルをインポートすると、コンフリクトが発生します。
インポートにより同じIDのモデルがそれぞれ追加されますが、親との所有関連が異なるためコンフリクトとなります。
対処方法
モデルの親要素は1つである必要があります。
適用したい所有関連1つのみが残るように指定してください。
- 複数の条件式モデルが設定されています。
発生条件
片方のコミットでモデルのフィーチャを割り当てる(=フィーチャ条件式を設定する)一方、もう片方のコミットでも同じモデルにフィーチャを割り当てると、コンフリクトが発生します。
対処方法
条件式モデルは1つしか設定することができません。
適用したい条件式モデル1つのみが残るように指定してください。
- シーケンス図が相互編集されています。
発生条件
片方のコミットでシーケンス図を更新する一方、もう片方のコミットでそのシーケンス図を更新すると、コンフリクトが発生します。
シーケンス図の場合、シーケンス図内の異なる要素を更新してもコンフリクトとなります。
対処方法
差分の詳細は、リボンの[表示] > [差分をエディタで表示]から確認できます。
シーケンス図に関しては、シーケンス図全体として片方の変更を選択する必要があります。
インタラクションモデルに対し、適用したい側を選択します。
- プロファイルが相互編集されています。
発生条件
片方のコミットで プロファイルを更新する一方、もう片方のコミットでもプロファイルを更新すると、コンフリクトが発生します。
プロファイルの場合、プロファイル内の異なる要素を更新してもコンフリクトとなります。
対処方法
プロファイルに関しては、プロファイル全体として片方の変更を選択する必要があります。
プロファイルのルート要素に対し、適用したい側を選択します。