この章では、バージョン・コントロールのためのSubversionのインストールおよび構成方法について説明します。
内容は次のとおりです。
SubversionはApacheプロジェクトですが、Apacheではオペレーティング・システム用の独自のバイナリ・ファイルをビルドしていません。サード・パーティが、すべての主要オペレーティング・システム用のバイナリ・ファイルをビルドします。
次のURLに、サード・パーティによってビルドされた全主要オペレーティング・システム用のSubversion最新安定リリースへのリンクが示されています。
http://subversion.apache.org/packages.html
可能な場合には、YUMやAPTなどのパッケージ・マネージャを使用して、他のソフトウェアのインストールを管理してください。
Windowsの場合は、次のURLで入手可能なSilk SVNなどのプリコンパイル済バイナリ・パッケージを使用することをお薦めします。
Windowsで、インストーラ・パッケージを使用してSubversionをインストールする場合は、サーバー・バイナリ・ファイルを含むインストーラを選択するようにしてください。
Subversionは、主なプラットフォームのどれにでもインストールできます。
インストール方法は、プラットフォームおよび配布方法によって異なります。
たとえば、YUMを使用する場合、コマンドは次のようになります。
sudo yum install subversion
Windowsの場合、デフォルトのインストール・パスをより短い場所に変更できます。
C:\svn
PATH
変数がインストーラによって正しく設定されていることを確認します。
svnserve
のバージョン情報を取得するには、次のコマンドを実行します。
svnserve --version
コマンドが見つからない場合は、次の手順を実行します。
「システム環境変数」
ペインのPATH変数を編集します。必要なときにSubversionが実行されるように、サービスとして構成します。
Subversionサーバーをサービスとして構成するには、次の手順を実行します。
Linuxの場合
Linuxインストール・プロセスによって、自動的に/etc/init.d/svnserve
スクリプトが作成されます。このスクリプトにより、システムの起動時にサーバーが起動します。
サービスを手動で開始するには、次のコマンドを実行します。
sudo /etc/init.d/svnserve start
Windowsの場合
サービス・マネージャにsvnserve
を登録する必要があります。svnserve
を登録するには、次のコマンドを実行します。
sc create svnserver binpath= "C:\svn\svnserve.exe" --service -r "REPOS_PATH"
displayname="Subversion" depend=Tcpip start=auto
前述のコマンドで、REPOS_PATH
はローカル・ファイル・システムへの絶対パスです。
Subversionリポジトリは、バージョン作成されている、Subversionサーバー上のアーティファクトの集まりです。
この項では、次の項目について説明します。
Subversionのインストール後、リポジトリを作成する必要があります。svnadmin
という名前のコマンドライン・ユーティリティは、サーバー側の管理操作の主要ツールです。
リポジトリを生成するには:
リポジトリへのアクセスは、ファイル許可と、SVNクライアントを介してリポジトリにアクセスするために参照されるユーザーよって制御されます。新規リポジトリ内のすべてのファイルについて、ユーザーおよびグループ許可が、リポジトリの内容に対するアクセス制御のタイプを反映していることを確認します。
デフォルトでは、新規リポジトリに対して匿名の読取り専用アクセスが有効になります。つまり、SSHアクセスを持つどのユーザーでも、リポジトリの許可設定に関係なく、リポジトリ・ファイルをチェックアウトできることになります。これは、REPOS_PATH
/conf/svnserve.conf
ファイルで変更できます。
これでリポジトリの作成が完了し、次の基本URLを使用することで、新規リポジトリに対する標準操作をSubversionクライアントで実行できます。
svn+ssh://USER@HOST/REPOS_PATH
次に例を示します。
svn ls svn+ssh://mycompany@localhost/ciroot/subversion/repository
svn+ssh
以外にも、Subversionによってサポートされている他のプロトコルが複数あります。他のプロトコルを構成する方法については、Subversionのマニュアルを参照してください。デフォルトでは、Windowsでsvn+ssh
は使用できないことがあります。
Subversionではリポジトリ内に特定のサブディレクトリ構造は必要ありませんが、このマニュアルで行われているように、規定の表記規則に従うことをお薦めします。
一般的なリポジトリ・レイアウトは次のようになります。
主要なコード行の開発はtrunk
ディレクトリで行われます。リリースが実行されると、現在のトランク・ソースが、tags
ディレクトリの、そのリリースに対応するタグにコピーされます。Subversionのコピー操作は、サーバーが内部的に変更を追跡するため、記憶域の点で高価ではありません。
次にタグの例を示します。
my-project/tags/3.0.5
前述の例の場合、3.0.5
は、このタグが対応しているリリース・バージョンを示します。
タグは、パッチ作成またはバグ修正のリリースに必要になる可能性のある、将来的な作業に重要です。リリース・タグのもう1つの重要な点は、関連リリースの問題に関する調査が容易になることです。
タグのパッチやそれに続く変更が必要とみなされた場合は、分岐の作成が必要になります。分岐はリポジトリ内の他の場所のコピーで、タグとは構成が異なります。タグのコピーをbranches
ディレクトリに作成した後、コードをチェックアウトしたり、必要に応じて変更することができます。変更が完了すると、新しいリリースが分岐から作成され、対応するタグが作成されます。
次のProject-Aの例は、ソース・コードのパッチ管理に関する一般的なワークフローの概要を示しています。
Project-Aの場合、主要なコード行はproject-A/trunk
で管理されます。trunk
ディレクトリで現在開発されているバージョンは、バージョン2.1です。Project-Aには前のリリースが3つあり、1.0、1.1および2.0です。
バージョン1.0でパッチ・リリースを必要とする問題が検出されています。
この問題に対応するために、svn copy
コマンドを使用して、project-A/branches/1.0.1-SNAPSHOT
にproject-A/tags/1.0
タグがコピーされています。次の図に示すように、SNAPSHOT
指定はまだリリースされていないバージョンを示すMavenの仕組みです。
分岐のコード修正が完了すると、その分岐はproject-A/branches/1.0.1-SNAPSHOT
からproject-A/tags/1.0.1
タグにコピーされます。その後、このタグからリリース・ビルドを実行できます。
ディレクトリ構造表記規則の詳細は、次の場所にあるSubversionを使用したバージョン・コントロールで推奨されているリポジトリ・レイアウトに関する項を参照してください。
SVNで作業を開始する前に、典型的なワークフローを理解する必要があります。
コードを変更するには、通常、次の操作を実行します。
svn update
コマンドを使用して作業コピーを更新します。
変更を行います。必要に応じて、svn add
、svn delete
、svn copy
およびsvn move
コマンドを使用し、ファイルを編集します。
svn status
およびsvn diff
コマンドを使用して、変更を確認します。
間違いを修正します。svn revert
コマンドを使用すると、変更を取り消したり、中止することができます。
競合を解決します。競合が解決したら、svn resolve
コマンドを使用してマークを付けます。
svn commit
またはsvn ci
コマンドを使用して、変更をコミットします。
図3-1は、SVN操作の完全なライフサイクルを示しています。
継続的インテグレーションの開発プロセスでは、このワークフローはおおむね変わりません。非継続的インテグレーション・プロセスよりも、コミットされる変更のセットが小さく、より頻繁に発生する傾向があります。継続的インテグレーション・システムでインテグレーション・ビルドを実行できるように、ターゲット・リリース用のアクティブなトランクまたは分岐コードをコミットする必要があります。将来的にメインライン・コード・ベースにマージすることを意図した個人的な分岐の作成は避けてください。個人的な分岐およびマージの手法は統合を遅らせるもので、継続的インテグレーションの原則に反します。
Subversionプロジェクトを扱う際には、ファイルをローカル・ファイル・システムにチェックアウトします。次に、ファイルをリポジトリにコミットする準備ができたら、プロジェクトをチェックインします。
Subversionで管理されたプロジェクトの作業を開始するには、最初にファイルをローカル・ファイル・システムにチェックアウトする必要があります。SVNクライアントによって、各サブディレクトの.svn
ディレクトリにあるSubversionメタデータなどのプロジェクト・ファイルがシステムにコピーされます。
Subversionプロジェクトを使用するには、次の手順を実行します。
タグ付けによって分岐の名前付きポイント・イン・タイム・コピーが作成されます。
次の場合にタグがリリースされます。
プロジェクトがリリースされた場合
重要なマイル・ストーンが発生した場合
リリースにタグを付けることが重要ですが、これは、タグによってパッチ適用リリースのための簡単なメカニズムが提供されるためです。あるリリースに不具合が見つかった場合、そのリリースのタグから分岐して、修正を行い、そのリリースのパッチを作成できます。後でこの新しい(パッチ適用済の)リリースに問題が見つかり、新しい問題に対する修正が必要になった場合には、このリリースにも同様にタグを付けます。
リリースにタグを付けなかった場合、そのリリースにビルドされている正確なコード行の取得が非常に難しくなります。
注意:
タグ付きリリースは読取り専用アーティファクトとして取り扱います。タグを付けた後にリリースに対するマージを続行しないようにしてください。
TortoiseSVNは、Windowsエクスプローラと統合されるフリーのWindows Subversionクライアントです。標準的なSubversionクライアントのすべての操作をWindowsユーザー・インタフェースで実行できます。フォルダおよびファイル・アイコンのデコレータは、Subversionファイルのステータスを示します。コマンドライン・ツールはメニュー項目にマップされ、オプションはダイアログ・ボックスを介して構成可能です。また、Tortoiseでは高度でグラフィカルな差分と、競合の解決に役立つマージ・ツールも提供しています。
TortoiseSVNは、次からダウンロードできます。
このドキュメントは、Subversionを起動して実行するクイック・ガイドとして作成されているため、Subversionの操作について詳細は書かれていません。
詳細は、次の『Subversionによるバージョン管理』を参照してください。
注意:
Subversionの知識がない場合は、『Subversionによるバージョン管理』を読むことをお薦めします。