27.5 subversionの概要

Subversionは、無償で公開されているバージョン管理システムであり、一般にCVSの後継と見なされています。つまり、通常、CVSに導入済みの機能はSubversionにも組み込まれています。特に、CVSの長所を考慮しても短所を補いきれないと思われる場合に使用することをお勧めします。この種の機能のほとんどについては、既に27.1.3項 「Subversion」で簡単に紹介しています。

27.5.1 Subversionサーバのインストール

サーバにレポジトリーデータベースをインストールする処理は比較的簡単です。Subversionには、そのための専用管理ツールが用意されています。新規レポジトリの作成コマンドは、次のとおりです。

svnadmin create /path/to/repository

svnadmin helpを使用すると、その他のオプションをリストできます。CVSとは異なり、SubversionはRCSベースではなく別のタイプのリポジトリをベースにしています。Berkeley DatabaseまたはFSFS (ファイルシステムを直接使用するリポジトリ)が、一般的に使用されています。リポジトリは、NFS、AFS、または Windows SMB のようなリモートファイルシステムにはインストールしないでください。データベースにはPOSIXロックメカニズムが必要ですが、これらのファイルシステムではこのメカニズムがサポートされていません。

コマンドsvnlookを実行すると、既存のレポジトリに関する情報が表示されます。

svnlook info /path/to/repository

異なる複数のユーザに対してレポジトリへのアクセスを許可するには、サーバを設定する必要があります。WebDAVがサポートされているApache Webサーバか、 Subversionが同梱されているサーバのいずれかを使用してください。svnserveを起動すると、svn://またはsvn+ssh://というURLでリポジトリにアクセスできるようになります。svnを呼び出すときに自己認証が必要なユーザは、etc/svnserve.confで設定できます。

Apacheとsvnserveのどちらを使用するかについては、さまざまな判断基準があります。これについては、Subversionのマニュアルを参照することをお勧めします。詳細については、27.5.3項 「関連情報」を参照してください。

27.5.2 使用方法と操作

Subversionリポジトリにアクセスするには、svnコマンド(cvsに類似)を使用します。svn helpコマンドを使用して、コマンドパラメータの説明を表示します。


checkout (co): Check out a working copy from a repository.
usage: checkout URL[@REV]... [PATH]

  If specified, REV determines in which revision the URL is first
  looked up.

  If PATH is omitted, the basename of the URL will be used as
  the destination. If multiple URLs are given each will be checked
  out into a sub-directory of PATH, with the name of the sub-directory
  being the basename of the URL.
...

対応するレポジトリに合わせて適切に設定されたサーバから提供されるコンテンツには、どのクライアントからも次のいずれかのコマンドを使用してアクセスできます。

svn list http://svn.example.com/path/to/project

または

svn list svn://svn.example.com/path/to/project

既存のプロジェクトを現行のディレクトリに保存(チェックアウト)するには、コマンドsvn checkoutを使用します。

svn checkout http://svn.example.com/path/to/project nameofproject

チェックアウトすると、クライアント上に新規のサブディレクトリnameofprojectが作成されます。これで、そのサブディレクトリに対して操作(追加、コピー、名前の変更、削除)を実行できます。

svn add file
svn copy oldfile newfile
svn move oldfile newfile
svn delete file

これらのコマンドは、ディレクトリに対しても使用できます。Subversionでは、ファイルやディレクトリのプロパティも記録できます。

svn propset license GPL foo.txt

この例では、プロパティlicenseの値GPLを設定しています。プロパティを表示するには、svn proplistを使用します。

svn proplist --verbose foo.txt
 Properties on 'foo.txt':
 license : GPL

変更内容をサーバに保存するにはsvn commitを使用します。他のユーザはsvn updateを使用してサーバと同期させることで、変更内容を自分の作業ディレクトリに取り込むことができます。

CVSとは異なり、svn statusを使用すると、リポジトリにアクセスしなくてもSubversionの作業ディレクトリのステータスを表示できます。ローカルの変更は5列に表示され、1列目が最も重要です。

' '

変更はありません。

'A'

オブジェクトには追加マークが付いています。

'D'

オブジェクトには削除マークが付いています。

'M'

オブジェクトは変更されています。

'C'

オブジェクトは競合しています。

'I'

オブジェクトは無視されました。

'?'

オブジェクトはバージョン管理対象ではありません。

'!'

オブジェクトは欠落としてレポートされています。このフラグが表示されるのは、オブジェクトがsvnコマンドを使用せずに削除または移動された場合です。

'~'

ファイルとして扱われていたオブジェクトがディレクトリで置換された、またはその逆の処理が発生しました。

2列目はプロパティのステータスを示します。他の各列の意味については、Subversionのマニュアルを参照してください。

27.5.3 関連情報

http://subversion.tigris.org/にアクセスしてsubversionプロジェクトのホームページを参照してください。パッケージsubversion-docによってディレクトリfile:///usr/share/doc/packages/subversion/html/book.htmlにインストールされるマニュアルも非常に参考になります。このマニュアルはhttp://svnbook.red-bean.com/svnbook/index.htmlでも入手できます。