第3章 リポジトリ

目次

リポジトリの作成
コマンドラインクライアントでのリポジトリ作成
TortoiseSVN でのリポジトリ作成
リポジトリへのローカルアクセス
ネットワーク共有にあるリポジトリへのアクセス
リポジトリレイアウト
リポジトリのバックアップ
サーバ側フックスクリプト
チェックアウトリンク
リポジトリへのアクセス
svnserve ベースのサーバ
はじめに
svnserve のインストール
svnserve の実行
svnserve での Basic 認証
SASL によるよりよいセキュリティ
svn+ssh での認証
svnserve でのパスベース認証
Apache ベースのサーバ
はじめに
Apache のインストール
Subversion のインストール
設定
複数のリポジトリ
パスベース認証
Windows ドメインでの認証
マルチ認証ソース
SSL を使用したサーバの保護
仮想 SSL ホストでのクライアント証明書の使用方法

リポジトリへアクセスするのにどのプロトコルを使用しても、最低 1 つはリポジトリを作成する必要があります。Subversion コマンドラインクライアントでも、TortoiseSVN でも作成できます。

まだ Subversion のリポジトリを作成していないのなら、さっそく作成しましょう。

リポジトリの作成

リポジトリを作成するのに FSFS バックエンドか、より古い Berkeley Database (BDB) フォーマットで作成できます。FSFS フォーマットは一般的に高速で、管理しやすく、ネットワーク共有や Windows98 でも問題なく動作します。BDB フォーマットは長い間テストされてきているので安定していると考えられてきましたが、FSFS にも数年の使用実績があるため、その主張も弱くなってきています。詳細は Subversion Book の Choosing a Data Store をご覧ください。

コマンドラインクライアントでのリポジトリ作成

  1. リポジトリの root フォルダとして SVN という空のフォルダ (例: D:\SVN\) を作成してください。

  2. D:\SVN\ の中に MyNewRepository というフォルダを作成してください。

  3. コマンドプロンプト (または DOS ボックス) を開き、D:\SVN\ に移動して、以下を入力してください。

    svnadmin create --fs-type bdb MyNewRepository
    

    もしくは

    svnadmin create --fs-type fsfs MyNewRepository
    

さて、D:\SVN\MyNewRepository にある新しいリポジトリを作成しました。

TortoiseSVN でのリポジトリ作成

図3.1 バージョン管理外フォルダの TortoiseSVN メニュー

バージョン管理外フォルダの TortoiseSVN メニュー

  1. Windows エクスプローラを開く

  2. 新しいフォルダを作成し名前 (例: SVNRepository) をつける

  3. 新しく作成したフォルダ上で 右クリック し、TortoiseSVNここにリポジトリを作成... を選択してください。

    リポジトリは新しいフォルダの内部に作成されます。そのファイルを自分で編集しないでください!!! エラーが発生したら、フォルダが空か書込が禁止されていないかを確認してください。

ヒント

TortoiseSVN は、もう BDB リポジトリを作成するオプションを提供しません。しかし、依然としてコマンドラインクライアントを使用すれば BDB リポジトリを作成できます。一般的に FSFS リポジトリの方が保守が容易ですし、BDB のバージョン間の差異からくる互換性問題に対して、私たちが TortoiseSVN を保守するのが容易になるのです。

TortoiseSVN の将来のバージョンでは、BDB リポジトリに対する file:// アクセスは、互換性問題によりサポートされません。もちろん、サーバ経由でアクセスする svn:// プロトコル、http:// プロトコル、https:// プロトコルは常にサポートされます。このため、file:// プロトコルでアクセスしなければならない新しいリポジトリは、FSFS で作成するのを強くお勧めします。

また、もちろん、ローカルのテスト用途は別として、file:// アクセスを全く使用しないのをお勧めします。サーバを用いるのは、開発者が一人で使用するのを除くすべてにおいて、より安全で、より信頼性が高くなります。

リポジトリへのローカルアクセス

ローカルリポジトリにアクセスするには、そのフォルダへのパスが必要です。Subversion はすべてリポジトリのパスを file:///C:/SVNRepository/ という形で表すことを覚えておいてください。一貫してスラッシュ ("/") を使用することに注意してください。

ネットワーク共有にあるリポジトリにアクセスするには、ドライブへのマッピングと UNC パスの両方が使えます。UNC パスは file://ServerName/path/to/repos/ といった形です。先頭にスラッシュ ("/") が 2 つあることに注意してください。

SVN 1.2 以前では、UNC パスは file:///\ServerName/path/to/repos というもっと曖昧な形でした。この形もまだサポートしていますが、お勧めしません。

警告

ネットワーク共有上で Berkeley DB リポジトリを、作成したりアクセスしたりしないでください。これはリモートファイルシステム上に存在できません。ドライブレターにマッピングしたネットワークドライブでもダメです。ネットワーク共有上で Berkeley DB を使おうとした場合、(すぐに不可思議なエラーに遭遇するか、数ヶ月後にリポジトリデータベースが破損するか) 結果が予想できません。

ネットワーク共有にあるリポジトリへのアクセス

原理上、FSFS リポジトリはネットワーク共有上に配置でき、file:// プロトコルを用いて複数のユーザがアクセスできますが、これは絶対にお勧めできません。実際、私たちは思いとどまらせようと強く思いますし、そのような使用をサポートしません。

第一に、すべてのユーザにリポジトリへ直接書き込みアクセスする権限を与えることになり、誰かが事故でリポジトリ全体を削除したり、何らかの方法で使用できなくしたりできます。

第二に、すべてのネットワークファイル共有プロトコルが、Subversion が求めるロックをサポートしているわけではなく、リポジトリが壊れた状態に見える可能性があります。すぐには起こらないかも知れませんが、ある日 2 人のユーザが、同時にリポジトリにアクセスしようとすることもあるでしょう。

第三に、ファイルのパーミッションを、まったく同じように設定しなければなりません。ネイティブの Windows 共有ではうまくいくかも知れませんが、SAMBA では特に難しいです。

file:// アクセスは、ローカルでの一ユーザのみのアクセスを想定しており、そのようにテストとデバッグを行っています。リポジトリを共有したければ、それはまさに適切なサーバをセットアップする必要があり、あなたが思うほど難しくはありません。サーバの選択・設定のガイドラインは、「リポジトリへのアクセス」 をお読みください。

リポジトリレイアウト

データをリポジトリにインポートする前に、データをどのような構成にするかをはじめに考える必要があります。お勧めレイアウトを採用するなら、あとで楽ができるでしょう。

リポジトリの編成にはある程度、標準化された、おすすめの方法が あります。ほとんどの人々は trunkディレクトリに開発の 主系、ブランチコピーがある branches ディレクトリ、そしてタグコピーがある tags ディレクトリを作成します。リポジトリがただ一つのプロジェクトを含む場合には、以下のように、この三つのディレクトリをリポジトリ最上位に作ります。

/trunk
/branches
/tags

リポジトリに複数のプロジェクトがあるなら、以下のようにブランチでまとめたレイアウトにしたり、

/trunk/paint
/trunk/calc
/branches/paint
/branches/calc
/tags/paint
/tags/calc

プロジェクトでまとめたりします。

/paint/trunk
/paint/branches
/paint/tags
/calc/trunk
/calc/branches
/calc/tags

プロジェクト同士があまり密接に連携しておらず、それぞれ個々にチェックアウトできるなら、プロジェクトごとにインデックス化するのは意味があると思います。プロジェクト同士が連携している場合には、一度に全てチェックアウトしたいと思うことでしょうし、ひとつの配布パッケージに結合されるプロジェクトなどはブランチでインデックス化する方がいいでしょう。この方法だと、ひとつのトランクをチェックアウトするだけで済み、またサブプロジェクト間の関係も容易に見て取れます。

トップレベルに /trunk /tags /branches アプローチを採用する場合、別にあらゆるブランチやタグについて全体のトランクをコピーしなければならないと言うことはありません。また、ある点ではこの構造は最も柔軟な形となります。

関連がないプロジェクトはリポジトリを分けるという選択もあります。変更をコミットする際、リビジョン番号はプロジェクトごとに振られるのではなく、リポジトリ全体の変更に振られます。関連のない 2 つのプロジェクトがリポジトリを共有するとリビジョン番号に大きなギャップが生じます。Subversion プロジェクトと TortoiseSVN プロジェクトは同じホストアドレスにありますが、独立して開発できるよう、またビルド番号で混乱しないようリポジトリが分けられています。

もちろん、以上の共通のレイアウトを無視することだってできます。あなた方によく作業できるようにならどのような類の変更でも起こせます。ここで選択したものが、永遠に続けなければならないわけではない、ということを覚えておいてください。いつでもリポジトリを再構成できます。ブランチやタグは特定のディレクトリですから、TortoiseSVN はお好みにあわせて移動したり名前を変更したりできます。

あるレイアウトから別のレイアウトへ切り替えるのは、ただ単にサーバ側での移動が問題になります。リポジトリを再構成する方法をとりたくなければ、ディレクトリを移動してください。

そのため、まだ基本的なフォルダ構造を、リポジトリに作成していないのであれば、今のうちにやっておくべきです。これを行うには、2通りの方法があります。 /trunk /tags /branches 構造を単に作成したいだけであれば、リポジトリブラウザを使用して、3つのフォルダを作成できます (3つのコミットに分かれます)。もっと深い階層を作成する場合は、まずディスクにフォルダ構造を作成し、その後一度にコミットする方法が簡単です。以下のように行います。

  1. ハードディスクに新しい空のフォルダを作成してください。

  2. このフォルダの中にお好みのトップレベルフォルダ構造を作成してください。まだ中にはファイルを置かないでください!

  3. このフォルダの上で 右クリック し、TortoiseSVNインポート... を選択してリポジトリ内のこの構造にインポートしてください。リポジトリルートの中に基本リポジトリレイアウトを作成するため、これで一時フォルダをインポートできます。

リポジトリには、中身だけでインポートしたフォルダ名は現れないことに注意してください。たとえば、以下のようなフォルダ構造を作成してください。

C:\Temp\New\trunk
C:\Temp\New\branches
C:\Temp\New\tags

リポジトリルートに C:\Temp\New をインポートすると、以下のようになります。

/trunk
/branches
/tags