svn:externals

TortoiseSVNの外部依存の作り方を忘れてしまった。外部依存(キーワード、svn:externals)とは、外部のライブラリをプロジェクトの依存オブジェクトにしてしまう方法です*1

事例

二つのプロジェクトを考えます。ひとつはアプリケーションプロジェクト「My App」で、もうひとつは、コモンライブラリ(他のプロジェクトでも使えるユーティリティ群)「My Lib」です。「My App」プロジェクトに外部依存として「My Lib」を参加させます。

基本の作成
  1. 次のように普通のフォルダ構成をリポジトリ用に作成します。

D:/My SVN
 └ My App/

  1. 「My App」のフォルダで、「Create repositry here」を実行します。
  2. 「My App」フォルダで「Repo-browser」を起動します。あるいは、URL:「file:///D:/My SVN/My App」を指定して「Repo-browser」を起動します。
  3. 「branches」、「tags」、「trunk」フォルダを作ります*2
  4. 「trunk」内に必要なフォルダ構成を作成します。たとえば、「src」、「dist」、「resources」などとします。

この時点で、リポジトリは次のようになります(HD上のフォルダ構成ではなく、Repo-browserで表示されるリポジトリ構成です)。

file:///D:/My SVN/My App
  ├ branches/
  ├ tags/
  └ trunk/
      ├ dist/
      ├ resources/
      └ src/


じゃぁ、HD上のリポジトリのフォルダ構成はというと、

D:/My SVN/My App
  ├ conf/
  ├ db/
  ├ hooks/
  ├ locks/
  ├ format
  └ README.txt


「My Lib」も同様にして、URL:「file:///D:/My SVN/My Lib」内に「branches」、「tags」、「trunk」フォルダを作ります。各フォルダは空のままでも構いません。

外部依存の作成
  1. 「My App」で「Repo-browser」を起動します。
  2. 「trunk」を選択し、(右クリ)「Show properties」を起動します。
  3. 「New...」ボタンを選択し、
    1. Property name:「svn:externals」と手入力し、
    2. Property value:「^/../My%20Lib/trunk frameworks」と手入力します*3
  4. 適当なフォルダにCheck outします。

次のような構成のプロジェクトフォルダが作成されます。

E:/My App
  ├ .svn/
  ├ dist/
  ├ frameworks/
  ├ resources/
  └ src/


「frameworks」というのが「My Lib/trunk」フォルダのコピーになります。

初心を振り返ってみたところ・・・

今回、基本をおさらいしたついでに、SVN使い初めの頃につまづいたことを思い出しました。それは、

SVNをバックアップと考えていると、なかなかSVNになじめない

ということです。現実にはSVNをバックアップとして使っていますが、バックアップ、つまり、SVNリポジトリが「副」で、ユーザホームのプロジェクトが「正」という考え方だと蹉跌が多いということです。あくまでも、リポジトリが「正」、ホームが「副」というふうに考えるとすっきりとします。

ユーザホームのプロジェクト = ワーキングコピー = 作業用のコピー

当たり前のようですが、SVNの使い初めの頃や慣れて堕落している今も脳みそが勘違いしているので自戒としてのメモです。

*1:ここしばらく、プロジェクトの環境構築はシェルで自動実行していました。いわゆるスケルトンの生成です。その堕落ぶりが祟って、手動の方法がすっぽりと記憶から抜け落ちてしまいました

*2:SVNのお約束。trunkが本流。branchsが傍流。tagsはリリースやトピックス的スナップショットに使います

*3:空白は「%20」を使います