NDMerge によるマージの概要
NDMerge のマージ対象や内容を示します。
ブランチのマージ

NDMergeは現在のブランチ(own)と指定した他ブランチ(other)の Next Design のデータをマージします。- 標準のGitマージの動作のようなテキスト差分のマージではなく、 Next Design のファイル毎のデータをメモリ上に構築し、モデル毎に差分をマージします。
- Next Design の下記ファイルに対応しており、各ファイル単位でデータを構築します。
- JSON形式のファイル
nprojnprofnmdl
 - DB形式のファイル
iprojiprofimdl
 
 - JSON形式のファイル
 
 - Next Design の下記ファイルに対応しており、各ファイル単位でデータを構築します。
 - 例えば、現在のブランチ(own)における
モデルA.nmdlと指定した他ブランチ(other)のモデルA.nmdlのデータを構築しマージします。他のモデルファイルのデータは、モデルA.nmdlのマージには何も影響しません。 
- 標準のGitマージの動作のようなテキスト差分のマージではなく、 Next Design のファイル毎のデータをメモリ上に構築し、モデル毎に差分をマージします。
 
要素ごとのマージ概要
NDMerge では、よくあるテキストの1行単位の変更差分を扱うのではなく、モデル単位での変更を差分として扱います。マージした結果は Next Design のファイルに反映されます。コンフリクトがある場合はエラーとなりマージすることはできません。
モデルのマージ
- 現在のブランチ(own)と指定した他ブランチ(other)でモデル上のコンフリクトがなければ、フィールドの値やモデルの追加・削除などをマージすることができます。
 
マージの例
- 
各ブランチのモデルのデータを下記に示します。
// baseのモデルの例
{
"Metamodel": "ユースケース",
"Fields": {
"Name": "追従走行(ADAPTIVE)",
"Description": "先行車との車間距離を維持した走行。",
"Scenarios$Embed": [ ]
}
}// 現在のブランチ(own)のモデルの例
{
"Metamodel": "ユースケース",
"Fields": {
"Name": "追従走行(ADAPTIVE-DRIVE)", // Nameの値を変更
"Description": "先行車との車間距離を維持した走行。",
"Scenarios$Embed": [ // シナリオを1つ追加
{
"Metamodel": "シナリオ",
"Fields": {
"Name": "基本フロー", }
}]
}
}// 指定した他ブランチ(other)のモデルの例
{
"Metamodel": "ユースケース",
"Fields": {
"Name": "追従走行(ADAPTIVE)",
"Description": "先行車との車間距離を維持した走行。先行車がいない場合、定速走行となる。", // Descriptionの値を変更
"Scenarios$Embed": [ // シナリオを1つ追加
{
"Metamodel": "シナリオ",
"Fields": {
"Name": "例外フロー(E1)", }
}]
}
} - 
上記のownとotherの変更はコンフリクトしないため、下記のようなマージ結果となります。特に
Scenariosフィールドへの要素追加は論理的に扱われ、ownとother両方の変更をマージします。// マージ後のモデルの例
{
"Metamodel": "ユースケース",
"Fields": {
"Name": "追従走行(ADAPTIVE-DRIVE)", // ownの値をマージ
"Description": "先行車との車間距離を維持した走行。先行車がいない場合、定速走行となる。", // otherの値をマージ
"Scenarios$Embed": [ // ownとotherの両方をマージ
{
"Metamodel": "シナリオ",
"Fields": {
"Name": "基本フロー", }
}
{
"Metamodel": "シナリオ",
"Fields": {
"Name": "例外フロー(E1)", }
}]
}
} 
表示情報のマージ
- ダイアグラムのシェイプの位置やサイズ、背景色やフォントなどのスタイルは、現在のブランチ(own)を優先してマージされます。
- 現在のブランチ(own)と指定した他ブランチ(other)で表示情報の変更があったとしても、コンフリクトとして表示はせず現在のブランチ(own)の変更を採用します 。
 - なお、マージを優先するブランチをオプションで指定している場合は、そちらのブランチの値を採用します。
 
 
プロファイルのマージ
- 現在のブランチ(own)と指定した他ブランチ(other)でプロファイル上のコンフリクトがなければ、クラスやビュー定義の追加・削除などをマージすることができます。
- コンフリクトがある場合、一方のブランチの内容を全て採用しコミットします。
もう一方のブランチでマージできる変更箇所も、採用した側のブランチの内容でコミットされます。 
 - コンフリクトがある場合、一方のブランチの内容を全て採用しコミットします。
 
参照
- プロファイルのコンフリクトの解消については、 モデリング > Git を使ったチーム開発 > ユーザーズガイド > コンフリクトの解消 > プロファイルのコンフリクト を参照してください。
 
プロジェクトのマージ
- 現在のブランチ(own)と指定した他ブランチ(other)でプロジェクト情報のコンフリクトがなければ、マージすることができます。