Mercurialではじめる分散構成管理

第6回 勝手に「分散構成管理」 ~非Mercurial環境との共存

この記事を読むのに必要な時間:およそ 4 分

今回は,対象の構成管理がMercurialであるか否かに関わり無く,Mercurialを併用することで開発効率を向上させる手法を説明します。

題材としてフリーソフト/オープンソースソフトを取り上げますが,ここで説明する手法は,「Mercurial以外の構成管理ツールの使用を指定されている開発」といった,(残念ながら)良くあるシチュエーションでも適用可能です。

なお本稿では,フリーソフト/オープンソースソフトの総称として,以降FLOSS(Free/Libre and Open Source Software)の略称を使用します。

No Patch, No Life

世間的にFLOSSが認知されて随分時間も経ちましたし,その数も相当なものになりました。

その気になれば,CVSやSubversionで運用されているリポジトリにアクセスして,最新成果をいち早く試してみることも,これまでの開発過程の記録を参照することも容易にできます。

しかし,折角ソースコードが手元にあっても,CVSやSubversionのような中央集約形式の構成管理ツールの場合,いざこれらFLOSSのソースに独自の変更を加えようとすると,以下のような問題が発生します。

コミット権限が無いので,自分の作業を記録できない
その場限りの変更なら問題ありませんが,継続的に変更作業を実施する=ある程度の規模の変更を行う場合,「変更」そのものの構成管理ができないのは致命的です。
新しい版が出た際に,独自の変更分の反映が面倒

FLOSSの場合,比較的短期間でバグが修正された新しい版がリリースされることが多々あります。

折角新しい版で品質が向上していても,独自変更部分は構成管理されていませんので,新しい版に対して適用するのは非常に面倒です。

結局のところ,こと構成管理に限って言えば,圧倒的に利用者の立場が弱いといえます。

「独自の変更」という言い方をすると:

今時のFLOSSは,特に改変しなくても十分使えるでしょ?

と考える方もいることでしょう。

しかし,「独自の変更」は必ずしも特定用途(e.g.:特殊な環境・デバイス・設定での使用等)向けの専売特許ではありません。折角のソースファイル公開なのですから:

  • プログラミングの学習の際の,コメント付与や改変実施
  • 問題解析のための,ログ出力追加

といったことをやらない手はありません。

リポジトリのハイブリッド化

まずはCVSなりSubversionを使用して,対象の成果物を「チェックアウト」し,続いて成果物をチェックアウトしたディレクトリをMercurialのリポジトリとするために,"hg init"を実行します。

これでこのディレクトリは,Mercurialのリポジトリでありながら,他の構成管理ツール(CVS等)の管理下にもあることになります。一種のハイブリッド(混成)リポジトリと言っても良いでしょう。

しかし,この時点ではまだ単に「Mercurialのリポジトリである」というだけで,Mercurial側では何も管理していない状態ですので,チェックアウトした成果物を初期バージョンとしてMercurialに登録します。

まずはCVSやSubversionの管理情報格納ファイルを無視するために,以下のような".hgignore"ファイルを記述します。

syntax: re

# CVS との併用の場合
^CVS/
/CVS/

# Subversion との併用の場合
^\.svn/
/\.svn/

".hgignore"ファイルは,ワーキングディレクトリの最上位ディレクトリに配置します(それ以外の場所では機能しません)。「ワーキングディレクトリの最上位ディレクトリ」は"hg root"が表示するディレクトリです。

上記以外にも,以下のような設定が有用でしょう。

syntax: glob

# Emacs のバックアップファイル
*~

# C/C++ のオブジェクトファイル
*.o

# Java のクラスファイル
*.class

"syntax: re"や"syntax: glob"は,指定した無視対象パターンの文法を指定するもので,"re"は正規表現(regular expression)の,"glob"はシェル形式のパターンマッチングを意味します。

後は"hg add"によってファイルを登録するのですが,今回のようなケースでは,"-A"オプション付きの"hg commit"を使用するのが便利です。

"hg commit"に"-A"オプションを指定することで,以下の点で無指定の場合と振る舞いが変化します。

未知のファイルの追加:
"hg status"で"?"表示されるファイルに対して,"hg add"が指定されたものとして振舞います。
見失ったファイルの除外:
"hg status"で"!"表示されるファイルに対して,"hg remove"が指定されたものとして振舞います。

著者プロフィール

藤原克則(ふじわらかつのり)

Mercurial三昧の日々が嵩じて, いつの間にやら『入門Mercurial Linux/Windows対応』を上梓。凝り性なのが災いして,年がら年中アップアップな一介の実装屋。最近は仕事の縁が元で,OpenSolarisに入れ込む毎日。

コメント

コメントの記入