svn:externals を使うときのポイント

subversion で externals の設定をしたが、いろいろ試してみると気づく点があったのでメモ的に書いてみる。

externals 属性を設定しコミットすると利用するすべての人に反映

Subversionの本を読んでいて、externals はすべての人が個別に設定しなきゃ行けないと個人的に思い違いをしていた。が、1回設定してコミットしてしまえば、他の人にも外部参照が有効になる。

externals 属性は 1 ディレクトリ にひとつ

ディレクトリに複数のディレクトリを external する場合は属性値を続けて書く。たとえば

ahe svn://var/svn/hoge/ahe hogehoge svn://var/svn/hoge/hogehoge

と書く。

externals するディレクトリは必ずしも参照先のディレクトリ名と一緒でなくて良い

aheahe svn://var/svn/hoge/hogehoge

でも可。externals を当てるディレクトリには aheahe ディレクトリに svn://var/svn/hoge/hoghoge ディレクトリ内のファイルがチェックアウトされる。

externals されるディレクトリはリポジトリ内に作る必要はない

externals されるディレクトリをあらかじめ作ってしまいがち*1だが、その必要はない。リポジトリ上に同じ名前のディレクトリを作成して、属性設定後に svn update を実行して参照先のファイルをチェックアウトしようとしても lock されているとエラーになる。

hogehoge というディレクトリ内に ahe を外部参照する場合、、、
ahe ディレクトリを作成するのではなく、hogehoge ディレクトリに externals 属性に属性値を与えて、コミット→ updateでおっけ。

externals ディレクトリに ignore 設定はできない?(未検証)

外部参照して持ってきた hogehoge ディレクトリ内のファイルのコミットや書き換えをさせたくないと、思ったので hogehogeディレクトリに対して

svn:ignore hogehoge

という設定を hogehoge ディレクトリがあるディレクトリに書いても。更新などはできてしまう。
参照元ディレクトリで属性を設定しないといけないのかもしれない。

*1:少なくとも自分はそう思っていた