Simulinkモデルのバージョン管理(5)

Simulinkモデルのバージョン管理(4)からの続きです。今回はテキストファイルのバージョン管理を行います。

分散型バージョン管理システムとして、MercurialベースのKiln(FogCreek社)を採用しました。

やることは、次の5つです。

  • リポジトリを作る
  • リポジトリにファイルを保存する
  • コードレビューする
  • バージョンを戻したり、差分を見たりする
  • 複数の人が別々に行った変更を、統合する

前回までに上4つをやりましたので、今回は最後の1つをやります。

複数の人が別々に行った変更を、統合する

(中央サーバー、および開発PCを使用する)

中央サーバーは、複数のエンジニアが共有して使用します。当然、エンジニアが別々に独自の変更を加えることもありえます。

そういった場合には、3点マージとよばれる作業を行います。3点とは、

  • ベースとなったバージョン
  • 開発者Aが変更したバージョン
  • 開発者Bが変更したバージョン

です。

これら3つを見比べながら、「マージしたバージョン」を作り上げます。

単純なシナリオで、これをやってみることにしましょう。

まず、開発者Aがいくつかのコミットを行い、それを中央サーバーにPushしたとしましょう。すると、こんな感じになります。

中央サーバーに、開発者Aの変更をPushした

ここで、開発者Bが加えた変更をPushしようとすると・・・エラーが起きます。

開発者Bから中央サーバーへのPushは失敗する

なぜなら、開発者Aが既に別の変更を加えているからです。こういう場合に、マージという作業を行います。

まず、TortoiseHG > Synchronizeにて、Pullを実施します。

Pullを実施する

すると、枝分かれしたバージョンの情報が開発者Bのマシンに取り込まれます。これをTortoiseHGのHG Repository Browserで見てみると、こんな感じになります。

枝分かれしたバージョン

この枝分かれしたバージョンを、再び1つにマージしましょう。ここで3点マージです。HG Repository Browser上で、tip を選択し、Merge with… を選択します。

tip で Merge with

すると、次のように3つのバージョンが表示されます。

ベースとなったバージョン、開発者Bのバージョン、開発者Aのバージョン

下半分のエディタ部分でマージを実施しましょう。その結果を保存し、続く画面でCommitをクリックすると・・・マージ完了です。HG Repository Browserは次のような感じになります。

マージされた2つのバージョン

この状態で中央サーバーにPushすると、成功します。Kilnの画面もこんな感じになります。

Kilnにも変更が反映された

まとめ

今回は、別々の人が行った変更を統合しました。やる事は、

  • いったんPullする
  • Mergeする
  • Commitする
  • Pushする

たったこれだけの事です。

さて、ここまではテキストベースのお話です。次回いよいよSimulinkモデルのバージョン管理を行います。