NDMerge によるマージの概要
NDMerge
のマージ対象や内容を示します。
ブランチのマージ
NDMerge
は現在のブランチ(own)と指定した他ブランチ(other)の Next Design のデータをマージします。- 標準のGitマージの動作のようなテキスト差分のマージではなく、 Next Design のファイル毎のデータをメモリ上に構築し、モデル毎に差分をマージします。
- Next Design の下記ファイルに対応しており、各ファイル単位でデータを 構築します。
- JSON形式のファイル
nproj
nprof
nmdl
- DB形式のファイル
iproj
iprof
imdl
- 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)でプロジェクト情報のコンフリクトがなければ、マージすることができます。