2012/02/02

TortoiseSVNで外部参照(svn:externals)を使用する方法

Mercurial(hg)のsubreposみたいなことをSVNでもできたんですね……
これがあれば別々のプロジェクトでも共有ライブラリが使用できるから管理が楽です。

外部参照(svn:externals)設定手順


前提条件としてtortoiseSVNは次のバージョンを使用しています。
また、言語は英語のまま使用しているので、ところどころ日本語に置き換えてください。
TortoiseSVN 1.6.16, Build 21511 - 32 Bit , 2011/06/01 19:00:35
Subversion 1.6.17, 
apr 1.3.12
apr-utils 1.3.12
neon 0.29.6
OpenSSL 1.0.0d 8 Feb 2011
zlib 1.2.5

取り込みたいディレクトリでSVNメニューからプロパティを選択。
新規プロパティに下記のように設定。

[Property Name]=[svn:externals]
[Property Value]=[dirname http://path/to/Repos]


※[]の記号は入力不要なので注意。

例として、下記のような構成で外部参照リポジトリを設定する。
[root]
  ├[ProjectX]
  ├[SubProjectY]
  └[SUbProjectZ]

ここではrootフォルダの直下に別プロジェクトで使用しているcommonlibリポジトリを設置したいとする。
まずは[root]ディレクトリ上でプロパティを下記のように設定する。
commonlib http://svnserver-xxxx/svn/ProjectA/trunk/commonlib

この状態でUpdateを行うとpath/to/reposで設定したリポジトリからチェックアウトしてきます。
[root]
  ├[ProjectX]
  ├[SubProjectY]
  ├[SubProjectZ]
  └[commonlib] (svn:externals = http://svnserver-xxxx/svn/ProjectA/trunk/commonlib)

この状態でrootディレクトリをコミットしてやれば以降はこのリポジトリをアクセスした人も外部参照先からcommonlibをリポジトリにUpdateします。

注意したいことは、この外部参照リポジトリを変更し、コミットしたら参照先リポジトリ分も更新されます。読み取り専用にしたいのであれば、commonlibに対して、新しく[svn:needs-lock]プロパティを設けて共通ライブラリの編集はロックを行わないとできない形に変更してしまう方法が考えられます。

もしくは該当リポジトリ側の書き込み制限をユーザー・グループ毎に区切って、そもそも権限がないと変更できないようにしてしまうかという形でしょう。

ローカルのワークに対して変更しないようにしたいだけであれば、フォルダのプロパティ自体を読み取り専用にして外部参照リポジトリ直下のフォルダを書き込み禁止にするといいかもしれない。.svnフォルダも書き込めなくなるかもしれないので注意。

本文を用いて外部参照リポジトリの設定して、わからないこと、躓いたこと等があればコメントしていただかえれば可能な限り補足使用と思います。

以上

0 件のコメント:

コメントを投稿