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

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)でプロファイルの変更がある場合、マージできずコンフリクトとして検出されます。
    • メタモデル、ビュー定義において、何らか1つ以上の変更がある場合、変更があったとみなされます。

プロジェクトのマージ

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

関連項目