マニュアル

第3章. リポジトリ

目次

リポジトリの作成
コマンドラインクライアントでリポジトリを作成する
TortoiseSVN でリポジトリを作成する
リポジトリへのローカルアクセス
ネットワーク共有上のリポジトリへのアクセス
リポジトリのレイアウト
リポジトリのバックアップ
サーバーサイドフックスクリプト
チェックアウトリンク
リポジトリへのアクセス

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

まだ Subversion リポジトリを作成していない場合は、今が作成する時です。

リポジトリの作成

コマンドラインクライアントでリポジトリを作成する

  1. SVN という名前の空のフォルダー (例: D:\SVN\) を作成します。これはすべてのリポジトリのルートとして使用されます。

  2. 別のフォルダー MyNewRepositoryD:\SVN\ の中に作成します。

  3. コマンドプロンプト (または DOS ボックス) を開き、D:\SVN\ に移動して、次のように入力します。

    svnadmin create --fs-type fsfs MyNewRepository
              

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

TortoiseSVN でリポジトリを作成する

図 3.1. バージョン管理されていないフォルダーの TortoiseSVN メニュー

The TortoiseSVN menu for unversioned folders

  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:// アクセスは、ローカルのシングルユーザーアクセス、特にテストとデバッグのみを目的としています。 リポジトリを共有する場合は、本当に適切なサーバーをセットアップする必要があります。そして、それはあなたが思うほど難しくありません。 サーバーの選択とセットアップに関するガイドラインについては、“リポジトリへのアクセス” というセクションをお読みください。

リポジトリのレイアウト

リポジトリにデータをインポートする前に、最初にデータをどのように整理するかを検討する必要があります。 推奨されるレイアウトのいずれかを使用すると、後でずっと簡単になります。

リポジトリを整理するためのいくつかの標準的で推奨される方法があります。 ほとんどの人は、開発のメインラインを保持するための trunk ディレクトリ、ブランチコピーを格納するための branches ディレクトリ、およびタグコピーを格納するための tags ディレクトリを作成します。 リポジトリに 1 つのプロジェクトのみが含まれている場合、多くの場合、人々はこれらのトップレベルディレクトリを作成します

/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
    

プロジェクトごとにインデックス化することは、プロジェクトが密接に関連しておらず、それぞれが個別にチェックアウトされる場合に意味があります。 1 回ですべてのプロジェクトをチェックアウトしたい場合や、プロジェクトがすべて単一の配布パッケージにまとめられている関連プロジェクトの場合、ブランチでインデックス化する方が多くの場合優れています。 この方法では、チェックアウトするトランクは 1 つだけで、サブプロジェクト間の関係がより見やすくなります。

トップレベルの /trunk /tags /branches アプローチを採用する場合、すべてのブランチとタグに対してトランク全体をコピーする必要はなく、ある意味でこの構造は最も柔軟性を提供します。

関連のないプロジェクトの場合は、個別のリポジトリを使用することをお勧めします。 変更をコミットすると、変更されるのはプロジェクトのリビジョン番号ではなく、リポジトリ全体のリビジョン番号です。 2 つの関連のないプロジェクトがリポジトリを共有すると、リビジョン番号に大きなギャップが生じる可能性があります。 Subversion プロジェクトと TortoiseSVN プロジェクトは同じホストアドレスに表示されますが、独立した開発を可能にする完全に別個のリポジトリであり、ビルド番号に関する混乱はありません。

もちろん、これらの一般的なレイアウトを無視することもできます。 自分やチームに最適なバリエーションを自由に作成できます。 選択したものが何であれ、永続的なコミットメントではないことを忘れないでください。 リポジトリはいつでも再編成できます。 ブランチとタグは通常のディレクトリであるため、TortoiseSVN はそれらを自由に移動または名前変更できます。

あるレイアウトから別のレイアウトへの切り替えは、一連のサーバーサイド移動を発行するだけです。リポジトリ内の整理方法が気に入らない場合は、ディレクトリを整理するだけです。

まだリポジトリ内に基本的なフォルダー構造を作成していない場合は、今すぐ作成する必要があります。 これを実現するには 2 つの方法があります。 単に /trunk /tags /branches 構造を作成したい場合は、リポジトリブラウザを使用して 3 つのフォルダーを作成できます (3 つの個別のコミットで)。 より深い階層を作成したい場合は、最初にディスク上にフォルダー構造を作成し、次のように単一のコミットでインポートする方が簡単です

  1. ハードドライブに新しい空のフォルダーを作成します

  2. そのフォルダー内に目的のトップレベルフォルダー構造を作成します - まだファイルを入れないでください!

  3. このフォルダー構造を含むフォルダーを右クリックし、TortoiseSVNインポート... を選択して、この構造をリポジトリにインポートします。 インポートダイアログで、リポジトリへの URL を入力し、[OK] をクリックします。 これにより、一時フォルダーがリポジトリルートにインポートされ、基本的なリポジトリレイアウトが作成されます。

インポートするフォルダーの名前はリポジトリに表示されず、その内容のみが表示されることに注意してください。 たとえば、次のフォルダー構造を作成します

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

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

/trunk
/branches
/tags
      

TortoiseSVN ホームページ