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)でプロファイルの変更がある場合、マージできずコンフリクトとして検出されます。
- メタモデル、ビュー定義において、何らか1つ以上の変更がある場合、変更があったとみなされます。
プロジェクトのマージ
- 現在のブランチ(own)と指定した他ブランチ(other)でプロジェクト情報のコンフリクトがなければ、マージすることができます。