バージョン管理システムは昨今の開発プロジェクトにおいて、欠かせない存在となりつつあります。ここでは、バージョン管理システムの意義と、コミット、ブランチなどを深く掘り下げていきます。
ここで説明する内容は、特定のバージョン管理システムに固有のものではありません。どのシステムを選択した場合にも適用できるはずです。詳細は、各システムのドキュメントを調べるようにしましょう。
ソースコードだけでなく、Webページやドキュメント、FAQ、設計メモなど、編集する可能性のあるものはすべてバージョン管理下に置くようにしましょう。これらは、同一リポジトリツリー内でソースコードの隣に置いておきます。書き残した情報は、すべてバージョン管理する価値があります。つまり、あらゆる情報は変化する可能性があるということです。今後変わりようのない内容は、バージョン管理ではなくアーカイブしなければなりません。例えば、メーリングリストに投稿されたメールの内容は、変わることがありません。このようなものをバージョン管理しても無意味です(もちろん、それが巨大な文書の一部となる場合などは別ですが)。
すべてを同じ場所でバージョン管理する理由は、そうしておけば作業に参加する人が1つのことを覚えるだけで済むからです。例えば、最初はWebページやドキュメントの修正から参加しはじめたメンバーが、後にコードそのものの修正も参加することがあります。すべてを同じ仕組みでバージョン管理しておけば、このような場合に新たにその使用法を学ぶ必要がなくなるのです。また、新機能を追加すると同時にドキュメントも更新したり、コードのブランチを作成すると同時にドキュメントのブランチも作成したりといった際にも便利です。
自動生成されるファイルはバージョン管理する必要がありません。これらのファイルは純粋に編集可能なデータではなく、別のファイルの内容を基にして自動生成されるものだからです。例えば、ビルドシステムでよく用いられるファイルconfigureは、テンプレートconfigure.inの内容を基にして自動生成されるものです。もしconfigureを変更したいのなら、configure.inを編集してから再生成することになります。つまり、この場合で言う「真に編集可能なファイル」は、テンプレートであるconfigure.inだけです。バージョン管理するのはテンプレートだけにします。生成した結果までバージョン管理してしまうと、テンプレートを修正した際にファイルを再生成することを忘れてしまうかもしれません。そうすると、ファイルの整合性が取れなくなり混乱の元となります*1。
「編集可能なデータはすべてバージョン管理下に置かなければならない」という規則には、残念ながら1つだけ例外があります。それがバグ追跡システムです。バグデータベースは編集可能なデータを大量に保持していますが、技術的な理由により、このデータをバージョン管理することはできません(バグ追跡システムの中には、ちょっとしたバージョン管理機能を独自に実装しているものもあります。しかし、これはプロジェクトのメインリポジトリとは独立したものとなります)。
プロジェクトのリポジトリは、Web上からも閲覧できるようにしなければなりません。これは、ただ単に最新のリビジョンが見られればいいレベルのものではありません。前のリビジョンにさかのぼったりリビジョン間の差分を見たり、変更時のログメッセージを見たりといった機能も含みます。
これは、そのプロジェクトのデータにかんする便利な入り口となるので、ブラウザビリティ(閲覧のしやすさ)が重要となります。もしWebブラウザ経由での閲覧ができなければ、そのプロジェクトの特定のファイルを調べたい人(あのバグ修正はどんな風に行われたのかな? など)はまずバージョン管理システムのクライアントソフトウェアをインストールするところから始めなければならなくなってしまいます。Webで見ることができれば2分で済むことなのに、それがないために30分掛かりの作業になってしまうことになります。
ブラウザビリティの中には、特定のファイルの特定のリビジョンが特定のURLで見られること、そして特定のファイルの(その時点での)最新リビジョンも特定のURLで見られることといった内容も含まれます。こうしておくと、技術的な議論の際にその場所を示しやすくなるので便利です。例えば「サーバをデバッグするためのヒントは、作業コピーにあるwww/hacking.htmlをご覧ください」という代わりに「サーバをデバッグするためのヒントは http://svn.collab.net/repos/svn/trunk/www/hacking.html をご覧ください」といえるのです。これは、常にhacking.htmlの最新リビジョンを指すURLです。URLを指定する方が、あいまいさを排除するという点でよいでしょう。
バージョン管理システムの中には、リポジトリをWebで閲覧するための仕組みが組み込まれているものもあります。また、サードパーティーのツールを使ってこの機能を実現しているものもあります。サードパーティーのツールとして有名なのはViewVC、CVSWeb、そしてWebSVNです。ViewVCはCVSとSubversionの両方に対応しています。一方、CVSWebはCVS専用、WebSVNはSubversion専用です。
[1] configure ファイルをバージョン管理するか否かについては、別の見方もあります。Alexey Makhotkin の記事“configure.in and version control”を参照ください。
content on this article is licensed under a Creative Commons License.