Subversionで管理しているソースコード中の$Id$を自動で展開できるようにする方法
Subversionで管理しているソースコード中で$Id$キーワードが使いたい場合は”svn propset“コマンドを使ってファイル単位で指定していかなくてはなりません。再帰的に指定したり、GUIクライアントが気を利かせてくれたりもしますが、いずれにしても新しいファイルを追加する度にプロパティの設定をしなくてはなりません。しかしそんなのはやってられません。
今日、とりあえずの解決策を見つけたのでメモ。
この方法では、リポジトリや作業コピーをいじるのではなく、ローカルのSubversionクライアントの設定を変更します。Subversionクライアントの設定ファイルは、以下のディレクトリに格納されています。
(TortoiseSVNなどのクライアントソフトがあれば、探さなくても設定画面から簡単に開けます。)
(“Windowsユーザーのホームディレクトリ”は、通常であれば”X:\Documents and settings\ユーザー名”)
このディレクトリの中の”config”というファイルを編集します。色々書いてあるわけですが、設定ファイル中にある以下の太字部分を追記・編集します。
### Set enable-auto-props to 'yes' to enable automatic properties ### for 'svn add' and 'svn import', it defaults to 'no'. ### Automatic properties are defined in the section 'auto-props'. enable-auto-props = yes [auto-props] ### The format of the entries is: ### file-name-pattern = propname[=value][;propname[=value]...] ### The file-name-pattern can contain wildcards (such as '*' and ### '?'). All entries which match will be applied to the file. ### Note that auto-props functionality must be enabled, which ### is typically done by setting the 'enable-auto-props' option. # *.c = svn:eol-style=native # *.cpp = svn:eol-style=native # *.h = svn:eol-style=native # *.dsp = svn:eol-style=CRLF # *.dsw = svn:eol-style=CRLF # *.sh = svn:eol-style=native;svn:executable # *.txt = svn:eol-style=native # *.png = svn:mime-type=image/png # *.jpg = svn:mime-type=image/jpeg # Makefile = svn:eol-style=native *.php svn:keywords=Id
(上はもちろんPHPの場合の例です。)
この設定ファイルでは、ファイル名のパターン単位でデフォルトのプロパティというのを設定します。ここでデフォルトのプロパティを設定しておくと(enable-auto-propsがyesになっていれば)インポート、またはファイルの新規追加時にここで指定したプロパティが自動的に適用されます。考えてみれば当然ですがコミットの際は適用されません。
少し余談ですが、svn:eol-styleというプロパティをauto-propsに登録することで、ソースコードの改行コードを統一することができます。いや、普通統一されているはずですが、たまにそういうのがなってないソースコードがあると思うんです。
こういう場合、エディタで改行コードを変更してコミットすると、diffで変更箇所(差分)を調べようとした時に全部変更したように表示されてしまい、残念なことになります。svn:eol-styleプロパティを指定してコミットすると、その辺りを割とスマートに解決してくれるので、これは便利だと思いました。
インポート、ファイルの新規追加時にIdキーワードを展開し、改行をLFで統一するようにするにはauto-propsセクションに以下のように記述します。
しかし今のままだとプロジェクトのメンバー全員が同じ設定になるように気をつける必要があるわけで。メンバー全員の設定を揃える目的で、こういうのがリポジトリ単位で設定できたらいいなぁと思いました。
See also:
Sourceforge.jpでSubversionの試験運用が始まった模様
XREA、sakuraサーバでのTortoiseSVNの設定


[...] XREA、sakuraサーバでのTortoiseSVNの設定 [...]