Hatena::ブログ(Diary)

現場のためのソフトウェア開発プロセス - たかのり日記 このページをアンテナに追加 RSSフィード Twitter

2008-07-22

[]Subversionリポジトリの外部参照を活かす 23:46 Subversionでリポジトリの外部参照を活かすを含むブックマーク 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は存在しませんが、属性をサーバにコミットしておけば、他の人が取得した際も、同様の構成にてファイルが取得されるようになります。


少し手間ではありますが、設定さえしてしまえば、ファイルの多重管理を防ぐことが可能になります。

discypusdiscypus 2008/07/22 23:55 Subversion 1.5ではsvn:externalの自由度が増えました。
普及が楽しみだったりします。
http://subversion.tigris.org/svn_1.5_releasenotes.html#externals

szk-takanoriszk-takanori 2008/07/23 00:01 > Subversion 1.5ではsvn:externalの自由度が増えました。

discypusさん、情報ありがとうございます。
SVN1.5では、相対パスでの指定も可能になったようですね。私も最近調査を始めたところなのですが、知りませんでした。

トラックバック - http://d.hatena.ne.jp/szk-takanori/20080722/1216737962