2008-07-22
■[Tech]Subversionでリポジトリの外部参照を活かす

大規模な開発になると、モジュールを分割して開発することになりますが、各モジュールで参照するライブラリ(Javaの場合はjar)は、共通の一ヶ所で管理したくなることがあります。
構成管理リポジトリでは、リポジトリからファイルを取得したらそのまま開発に入れるディレクトリ構成にしておくことが望ましいですが、複数モジュールが存在する中でそのような管理をしようとすると、ライブラリを多重管理することになってしまいます。
そこで、シンボリックのような参照ができると、ライブラリの管理が一元管理できて簡単です。
Subversionには、「外部参照」といって、リポジトリのシンボリックリンクのようなことを実現する方法があります。
以下にその設定手順を示します。
リポジトリの構成
SampleProject ├─branches ├─tags └─trunk ├─lib ├─module-a └─module-b
リンク先のディレクトリ構成
- 外部参照前
module-a ├─src ├─lib └─target
- 外部参照後
module-a ├─src ├─lib ├─lib-global <--- このディレクトリがtrunk/libを参照するようにしたい └─target
上記のようにするには、module-aディレクトリに対して、Subversionの「svn:externals」属性で、以下の値を設定する(svn propsetやsvn propedit コマンドなどで設定/編集可能)。
lib-global http://localhost/svn/SampleProject/lib
- 注意点
上記の属性を設定した後、update(更新)を行うと、「trunk/lib」内のファイルが「trunk/module-a/lib-global」配下に取得されます。
サーバ上でのリポジトリブラウザではlib-globalは存在しませんが、属性をサーバにコミットしておけば、他の人が取得した際も、同様の構成にてファイルが取得されるようになります。
少し手間ではありますが、設定さえしてしまえば、ファイルの多重管理を防ぐことが可能になります。
トラックバック - http://d.hatena.ne.jp/szk-takanori/20080722/1216737962
普及が楽しみだったりします。
http://subversion.tigris.org/svn_1.5_releasenotes.html#externals
discypusさん、情報ありがとうございます。
SVN1.5では、相対パスでの指定も可能になったようですね。私も最近調査を始めたところなのですが、知りませんでした。