実行可能な属性をファイルに付加する(svn:executable) - Subversion

解説

Subversionでファイルに実行可能な属性を付加したい。
複数のOS間で運用しているといつの間にか設定したパーミションが外れてしまう問題を解決したい。これはSubversionで属性の設定を行えばよい。

Subversion自体に、このファイルは「実行可能なファイル」であると記憶させてやれば解決する。Windows上では別段変化はないが、Linuxなどでcheckoutするとパーミションが設定された状態でファイルがセットされる。

$ ls
receive.cgi settag.cgi

$ svn propset svn:executable ON settag.cgi
property 'svn:executable' set on 'settag.cgi'

「settag.cgi」の部分は指定したいファイル名(パス)を入力する。後はこの状態でcommitすれば作業終了だ。どうも信じられないというならcommit後、適当なディレクトリでcheckoutし「ls -l」などとしてみれば本当に変わったかどうかを確認できる。

もちろん、複数ファイルを指定してもよい。

$ ls
receive.cgi settag.cgi

$ svn propset svn:executable ON *.cgi
property 'svn:executable' set on 'settag.cgi'
property 'svn:executable' set on 'receive.cgi'

なお、現在のところ属性値の「ON」に特に意味はない。値の内容に関わらずファイルに「svn:executable」が付加されていればSubversionは実行可能なファイルとして認識してくれる。

参考文献

「svn:executable」属性は半自動的なやり方でバージョン管理されているファイルのファイルシステム上の実行権限を制御するのに使われます。この属性は属性値を何も定義しません—単に属性名が存在していれば、Subversionによって実行ビットが保存されます。この属性を削除すると、実行ビットの全制御はオペレーティングシステムに戻されます。

たくさんのオペレーティングシステム上で、コマンドとしてファイルを実行できるかどうかは実行ビットの存在によって支配されています。このビットは普通、デフォルトでは無効となっていて、必要に応じてユーザが明示的に有効にしてやる必要があります。作業コピー中では、新しいファイルが常に作られ、その一方で、更新処理を通じて存在しているファイルの新しいバージョンを受け取ります。これは、あるファイルの実行ビットを有効にしてから作業コピーを更新した場合、もし更新処理の一貫としてそのファイルが変更されたときにその実行ビットは無効になってしまう可能性があるということです。そこでSubversionは svn:executable 属性を、実行ビットを有効にし続けるために用意しています。

この属性はFAT32やNTFSのように実行権限ビットの概念を持たないファイルシステム上では何の効果もありません。また、それは定義された値を持ちませんが、Subversionはこの属性が設定されると、強制的にその値を*とします。最後に、この属性はファイルに対してのみ有効で、ディレクトリに対しては意味を持ちません。