Subversionの属性
Suvbersionには属性というのが指定でき、これが結構興味深かったので。
属性とは
ディレクトリとファイルのバージョン管理に加えて、Subversionはバージョン化されたファイル、ディレクトリに付随したバージョン化されたメタデータの追加、修正、削除のためのインターフェースを用意しています。
このようなメタデータを属性と呼びます。
はい意味ワカラン。
まあ言葉なんてものはどうでもよくて、使い方を理解していればいいわけです。
使い方
その1 svn:ignore
まず一つ目。
Subversionのバージョン管理下に置くには、svn importコマンドを使いますが、その時に余計なファイルがimportされてしまうことがあります。
そんなときは、
$ svn propset svn:ignore *.txt . property 'svn:ignore' set on '.'
これはカレントディレクトリ(.)から拡張子がtxtのものをsvn import, svn add, svn statusの対象から除外するというものです。
svn:ignoreというのが「属性」になります。
ちなみに属性とは関係ないですが無視したいファイルであれば、.subversion/configファイルのglobal-ignoreで指定できます。
デフォルトは*.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Storeのようです。
$ vi .subversion/config -------------------------------------------------------------------------- ### Section for configuring miscelleneous Subversion options. [miscellany] ### Set global-ignores to a set of whitespace-delimited globs ### which Subversion will ignore in its 'status' output, and ### while importing or adding files and directories. global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store *.txt --------------------------------------------------------------------------
というようにすれば、拡張子が.txtのファイルが全てsvn import, svn add, svn statusから削除されます。
こちらもちなみに、ですがsvn statusにてsvn:ignore属性のファイルを表示したい場合は
$ svn status --no-ignore
その2 svn:keywords
これは以下のように使います。
$ svn propset svn:keywords "Date Revision Auth Revision" hello.php property 'svn:keywords' set on 'hello.php'
hello.phpの中身は
<? //$date$ //$Revision$ //$Author$ //$HeadURL$ print("Hello World."); ?>
だったとします。
すると、更新した瞬間に
<? //$LastChangedDate: 2008-05-11 01:10:59 +0900 (Sun, 11 May 2008) $ //$Rev: 560 $ //$Author: orangehat $ //$HeadURL: file:///home/xxxx/svn/trunk/hello.php $ print("hello world."); ?>
というように更新した時間(Date)、更新者(Author)、リビジョン($Rev)、リポジトリ上のURL(HeadURL)が置換されて、勝手に更新される!?というものです。
これって意外と便利なんじゃないかなあと思ったりする。
ちなみにEclipseのSubversionプラグインのSubclipseでは、右クリック > チーム > プロパティの設定 で同じように設定できます。
その3 EOLの改行
よく知られているようにWindowsのEOLはCRLF、UNIXはLFがデフォルトになっています。
そのため、Windowsで編集したファイルをコミットしてサーバ上のUNIXに更新をかけるとします。
するとWindowsの改行であるCRLFがUNIX上では^Mで表示されたりしてしいます。
誰もが経験するイラっとなわけですが、これも属性で解決できます。
$ svn propset svn:eol-style LF hello.php
とUNIX上のファイルにやってやると、たとえWindowsでCRLFで編集したファイルをコミットしても、勝手にUNIX上のhello.phpの改行コードをLFに直してくれたりします。
ちなみにこちらも、.subversion/configで設定できたりします。
$ vi .subversion/config -------------------------------------------------------------------- ### Section for configuring automatic properties. [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:eol-style=LF --------------------------------------------------------------------
これはスバラシイ!!
その他属性コマンド
- 属性編集
$ svn propedit 属性名 ファイル(ディレクトリ)名
- 属性リスト表示
$ svn proplist ファイル(ディレクトリ)名
- 属性削除
$ svn propdel 属性名 ファイル(ディレクトリ)名
それにしてもSubversionのドキュメントを読んでると知らんことばっかやなあ。
まあ使うかどうかは別やけど。