記載日:2009/02/28
Mac OS 10.5.6 ターミナル 2.0.1 Subversion 1.5.5

1.Subversion によるテキスト/非テキスト管理

Subversion ではリポジトリに格納するファイルについてテキストファイルか非テキストファイルかといった扱いをします。これは、 Subversion がテキストファイルであれば行単位の差分比較やマージの機能を提供するためで、逆にバイナリであればこの様な機能の提供は不要であるという判断もしています。

このテキストか非テキストかの判断は add コマンドでリポジトリ管理対象のファイルを追加する際に自動で行われます。ただし以下の出力の様に、実際はテキストファイルでも非テキストファイル(bin)と判断されてしまうケースがあります。リポジトリに格納する上では特に問題はありませんが、差分確認やマージしたりする場合は不都合が起こります。

$ svn add sample.txt
A (bin) sample.txt

ここでは、addコマンド 実行時に追加されるプロパティを調整することで、非テキスト(bin)と認識されたテキストファイルをテキストファイルとして認識させてやる方法を紹介します。 add コマンドについては、 svn 新規リソース追加 - コミット に記事を掲載していますので参考にしてみてください。

2.テキスト/非テキストの判断基準

Subversion ではリポジトリ下のファイルがテキストか非テキストかを svn:mime-type属性 で判断しています。 svn:mime-type属性が設定されていないか"test/" で始まる値が設定されていればテキスト、それ以外だと非テキストとして扱われます。

前項で追加した sample.txt の svn:mime-type属性 にどのような値が設定されているかは svnコマンド の proplistサブコマンド で確認できます。 --verbose が標準で出力される属性名に加えて属性値も表示させるためのオプションになります。それに続けて確認したいファイルのパスを指定します。

$ svn proplist --verbose sample.txt
Properties on 'sample.txt':
  svn:mime-type : application/octet-stream

この場合、sample.txt というファイルの svn:mime-type に "application/octet-stream" が設定されていることがわかります。この設定を削除するか、テキスト系の MIME-TYPE に変更してやることで、今後 sample.txt はテキストファイルとして扱われるようになります。

3.mime-type削除で非テキストファイルをテキストファイルと認識させる

いよいよ本題になります。svn:mime-type を変更することでテキストファイルと認識させることはできますが、テキスト系の MIME-TYPE にもいろいろな種類があるので、今回は svn:mime-type属性 を削除することでテキストと認識させることにしました。

svn:mime-type 属性の削除は、 svn コマンドの propdel サブ コマンド で行うことができます。 以下のように、削除したい属性(svn:mimetype)と対象ファイルのパスを指定して実行します。

$ svn propdel svn:mime-type sample.txt
property 'svn:mime-type' deleted from 'sample.txt'.


コマンドの出力から svn:mime-type 属性が削除されたことが確認できす。

以上で 非テキストと認識されていたファイルをテキストと認識させてやることができました。

参考文献