第3章 リポジトリ

目次

リポジトリの作成
コマンドラインクライアントを使用したリポジトリの作成
TortoiseSVNを使用したリポジトリの作成
リポジトリへのローカルアクセス
ネットワークフォルダー上のリポジトリへのアクセス
リポジトリのレイアウト
リポジトリのバックアップ
サーバー側フックスクリプト
チェックアウトリンク
リポジトリへのアクセス

リポジトリにアクセスするためにどのプロトコルを使用する場合でも、少なくとも1つはリポジトリを作成する必要があります。リポジトリは Subversion のコマンドラインクライアントでも、 TortoiseSVN でも作成できます。

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

リポジトリの作成

コマンドラインクライアントを使用したリポジトリの作成

  1. リポジトリのルートフォルダーとして SVN という空のフォルダー(ここでは D:\SVN\ とします)を作成してください。

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

  3. コマンドプロンプト(またはDOS-Box)を開いて D:\SVN\に移動し、以下のコマンドを実行してください。

    svnadmin create --fs-type fsfs MyNewRepository
    

これで、 D:\SVN\MyNewRepository に新しいリポジトリを作成できました。

TortoiseSVNを使用したリポジトリの作成

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

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

  1. Windows エクスプローラーを開いてください。

  2. 新しいフォルダーを作成し、名前をつけてください(例えば SVNRepository)。

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

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

    リポジトリ内にディレクトリ構造を作成したいと思うかもしれません。その場合は、 「リポジトリのレイアウト」に示したレイアウトオプション参照してください。

    ローカルのリポジトリを識別しやすくするために、 TortoiseSVN ではリポジトリを作成する際にカスタムフォルダーアイコンが設定されます。公式のコマンドラインクライアントを使用してリポジトリを作成した場合は、このフォルダーアイコンは設定されません。

ヒント

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

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

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

ネットワークフォルダー上のリポジトリにアクセスするには、ドライブ文字の割り当てと UNC パスの両方が使えます。 UNC パスは file://ServerName/path/to/repos/ といった形です。先頭にスラッシュ(「/」)が2つあることに注意してください。

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

ネットワークフォルダー上のリポジトリへのアクセス

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

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

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

  • 第三に、ファイルのアクセス権をきちんと設定しなければなりません。ネイティブの Windows 共有ではうまくいくかも知れませんが、 Samba では特に困難です。

  • 誰かが新しいバージョンのクライアントをインストールしてリポジトリのフォーマットをアップグレードすると、全員が新しいバージョンのクライアントにアップグレードするまで、リポジトリにアクセスできなくなります。

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

リポジトリのレイアウト

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

リポジトリの構成には標準的な、おすすめの方法があります。多くの人は開発のメインラインを保持するためのトランク(trunk)ディレクトリ、ブランチコピーを入れるブランチ(branches)ディレクトリ、そしてタグコピーを入れるタグ(tags)ディレクトリを作成します。リポジトリに単一のプロジェクトでしか使わない場合には、次のように、この3つのディレクトリをリポジトリ最上位に作ります。

/trunk
/branches
/tags
    

このレイアウトは一般的に使われていますので、 TortoiseSVN で新しくリポジトリを作成する際には、このディレクトリ構造を作成をするかどうか確認します。

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

/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インポート... を選択することで、フォルダ構造をリポジトリにインポートすることができます。インポートダイアログでは、リポジトリのURLを入力してOKをクリックしてください。これで、 temp フォルダーがリポジトリのルートの中に入り、基本的なリポジトリ構造を作ることができます。

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

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

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

/trunk
/branches
/tags