Simulinkモデルのバージョン管理(4)
Simulinkモデルのバージョン管理(3)からの続きです。今回はテキストファイルのバージョン管理を行います。
分散型バージョン管理システムとして、MercurialベースのKiln(FogCreek社)を採用しました。
やることは、次の5つです。
- リポジトリを作る
- リポジトリにファイルを保存する
- コードレビューする
- バージョンを戻したり、差分を見たりする
- 複数の人が別々に行った変更を、統合する
前回は上2つをやりましたので、今回は続きの2つをやります。
コードレビューする
Kilnには、コードレビュー機能があります。残念ながらSimulinkモデルのレビューはできません。しかし、m-fileや、S-Functionのソースコードなど、テキストファイルであればレビュー対象とする事が出来ます。
レビューを行うには、次の2つの条件が必要です。
- リポジトリが存在すること
- リポジトリに対し、HG Commit が行われていること
(他のレビューシステムをご存じの方へ: オープンソースのレビューシステムは、コミット前のパッチに対してレビューを行うものがほとんどです。一方このKilnは、コミット後のChangesetに対してレビューを行います。)
レビュー開始
(中央サーバーに、任意のマシンのWebブラウザでアクセス)
Kilnでは、リポジトリに対して行われた Commit 単位でレビューを実行します。レビュー開始は、New Review ボタンをクリックするだけです。
リポジトリのHistoryページにある、New Review ボタン
対象となるCommit、およびレビューアを指定
この結果、1つの「レビュー」が生成されました。
生成されたレビュー
左半分には、レビューアが記入したコメントが表示されます。右半分には、どのファイルがどう変更されたのか?が表示されます。
レビューコメント記入
(中央サーバーに、任意のマシンのWebブラウザでアクセス)
Kilnのレビュー画面では、各ファイルの変更箇所が色分けされて表示されます。
レビューアは、特定の行についてのコメントを記述することができます。そのためには、コメント入れしたい行を選択状態にします。
行を選択すると、コメント入力欄がポップする
ここで現れたコメント入力欄に、なにかコメントを入れましょう。コメントを入れた結果、次のようになります。
入力したコメントが反映された
レビューを終了する
(中央サーバーに、任意のマシンのWebブラウザでアクセス)
レビューを行ったら、結局これは良かったのか?悪かったのか?結論をださないといけません。
レビューの結果を選択する
レビュー結果は、以下の3つから選べるようになっています。
- Approved オッケーです。
- Rejected ダメです。修正しましょう。
- Won’t Review レビューしません。他の人に頼んで。。。
結果を選択すると、レビュー画面は次のようになります。
終了したレビューの画面
StatusとしてはClosedになっていますが、閲覧はいつでも出来ます。もしもRejectされた場合には、これを見ながら悪い点を修正していきます。
バージョンを戻したり、差分を見たりする
以前はちゃんと動いていたのに、いろいろ触ってたら動かなくなった!
こういう場合には、バージョンを戻してみたり、差分を見てみたり、いろいろしたくなる事でしょう。
分散型バージョン管理システムでは、リポジトリは開発PCに丸ごとコピーされます。ですから、これらの作業はすべて開発PCのみで行えます。車載試験のために中央サーバーと切り離されていても大丈夫です。
特定のバージョンを取り出す
(開発PCのみを使用する)
今つかっているフォルダから別のフォルダへ、特定のバージョンを取り出すことができます。以前動いていたのに・・・?という場合、その動いていた頃のバージョンを取り出して実験してみると良いでしょう。
別のフォルダへ特定バージョンを取り出す
まずは、どんなバージョンがあるか確認するため、TortoiseHGのHg Repository Explorerを起動します。
Mercurialでは、バージョンを Changeset と呼ぶ
1回Commitする度にChangesetというのが出来ます。これにはIDがついていて、これを指定することで特定バージョンを取り出せます。
試しに、バージョン0を取り出す場合、TortoiseHGのclone画面で次のような指定をします。
TortoiseHGのcloneコマンド
Source path には、今まで使っていたフォルダを指定します。
Destination pathには、新しく取り出すフォルダを指定します。
Advanced optionsの Clone to revisionにチェックを入れ、ここに先ほどのChangesetのIDを入力します。上図のように 0 と入力しても構いませんし、長いIDである23f584c1e1a0を指定しても構いません。
この作業を行った結果、あらたなフォルダに特定のバージョンを取り出すことができました。
バージョン0を取り出した
特定のバージョンとの差分を見る
(開発PCのみを使用する)
さて、特定のバージョンを取り出して動いていることを確認しました。でも、今のバージョンでは動きません。じゃあ、何が違うというのでしょうか?
こういった場合には、特定のバージョンと、現在のバージョンの違いを確認しましょう。
特定のバージョンとの違いを見る
そのためには、TortoiseHGのHg Repository Explorerを使用します。比べたいバージョンを選択して右クリックし、Diff to local を選択します。
Diff to localコマンド
すると、変更のあったファイル名の一覧が表示されます。
ためしに、my_mfile.mをダブルクリックしてみましょう。
その結果、次のようなdiffが表示されます。
特定のバージョンとの違いが見られる
この画面で、何がどう違っているかを確認できます。
ちなみに、今回はテキストの比較のみをあつかっています。次々回はSimulinkモデル同士をグラフィカルに比較する方法をご紹介します。
特定のバージョンに名前を付ける(=タグ)
(開発PCのみを使用する)
こまごまとした変更を加えていくと、履歴がいっぱいになります。とあるバージョンを出荷したのであれば、ぜひそのバージョンは覚えておきたいところです。その場合、タグを打つことで解決出来ます。
そのためには、TortoiseHGのHg Repository Explorerを使用します。タグを打ちたいバージョンを選択して右クリックし、Add / Remove Tagをクリックします。
Add / Remove Tagコマンド
ここでタグを打った結果、バージョン履歴は次のようになります。
特定のバージョンに、タグがついた
ここで付けたタグは、TortoiseHg でcloneする時に指定することができます。
まとめ
今回は、Kiln上でレビューをしたり、以前のバージョンと比較を行ったりしました。
一人で開発しているのであれば、ここまでの作業で十分です。しかし、複数人で作業をしていると、これだけではすみません。次回は、複数人で開発している場合に特有の問題を解決します。