メインコンテンツまでスキップ

NDMerge によるマージの概要

NDMerge のマージ対象や内容を示します。

ブランチのマージ

  • NDMerge は現在のブランチ(own)と指定した他ブランチ(other)の Next Design のデータをマージします。
    • 標準のGitマージの動作のようなテキスト差分のマージではなく、 Next Design のファイル毎のデータをメモリ上に構築し、モデル毎に差分をマージします。
      • Next Design の下記ファイルに対応しており、各ファイル単位でデータを構築します。
        • JSON形式のファイル
          • nproj
          • nprof
          • nmdl
        • DB形式のファイル
          • iproj
          • iprof
          • imdl
    • 例えば、現在のブランチ(own)におけるモデルA.nmdlと指定した他ブランチ(other)のモデルA.nmdlのデータを構築しマージします。他のモデルファイルのデータは、モデルA.nmdlのマージには何も影響しません。

要素ごとのマージ概要

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)でプロファイル上のコンフリクトがなければ、クラスやビュー定義の追加・削除などをマージすることができます。
    • コンフリクトがある場合、一方のブランチの内容を全て採用しコミットします。
      もう一方のブランチでマージできる変更箇所も、採用した側のブランチの内容でコミットされます。
参照

プロジェクトのマージ

  • 現在のブランチ(own)と指定した他ブランチ(other)でプロジェクト情報のコンフリクトがなければ、マージすることができます。

関連項目