2007年06月07日

改行とsvn:eol-style

今時のテキストエディターとかパーサーの類いは融通を利かせて賢く振る舞ってくれるので、問題を起こすことはほとんどないのだけど、混在していると微妙に気になるのが改行コード。ご存知の通り、Windows系だとCR+LFの2バイト、MacOSXとか各種Unix系はLFのみの1バイトで改行を表す。

同じ文化圏に閉じた世界で仕事している分には意識することもないけど、複数のプログラマーやデザイナーでチームを作って、成果物はSubversionにレポジトリを作って管理・共有、なんて体制になると、ちょっと気になったりするわけです。デザイナーさんがMacでHTMLを作って、プログラマーがWindows上でそのHTMLを切り貼りしてテンプレートを作る、なんて作業をしているといつの間にか2種類の改行コードが入り交じった妙なファイルが出来上がっていたりして。まぁ、まともなエディターを使えっていう説もありますが。

そのあたりの面倒を避けるために、ここ最近はテキストファイルをsvn addする時にsvn:eol-styleプロパティを'native'にセットするようにしております。これの効用は、レポジトリからダウンロードしてきた際に、自分の環境に応じた改行コードに変換してくれること。通常だと、CR+LFでcommitされたファイルはMacで拾っても改行コードはCR+LFのままだが、このプロパティを付けておけばWindowsに持ってきた場合はCR+LFに、MacOSXから拾うとLFになるというわけ。逆の場合も同様。

この機能は便利で良いのだけど、ちょっと気になったことが。svn:eol-styleなし&CR+LFなファイルに対してMacの作業コピーからsvn:eol-style=nativeにしてcommitしてもちゃんと機能する?

というわけで、実際にやってみた。結果はもちろん問題なし。svn propsetして、commitしたタイミングで手元の作業コピーもsvn:eol-style=nativeが反映された状態、つまり改行=LFのファイルに置き換えられていた。逆の場合、つまりWindowsにある改行=LFな作業コピーに同様の作業をした場合も同じ。まぁ当たり前か。

それじゃ、LFのみとCR+LFの行が混じってしまったファイルだとどうなる?という疑問が。これも実際にやってみた。結果は、svn propsetしようとすると
svn: ファイル 'foo.html' は改行文字が一貫していません
svn: 改行文字スタイルが一貫していません
なんてエラーになってアウト。こういうファイルができてしまったときは手動で改行コードを修正するしかなさそうです。
posted by cesare at 23:25 | 技術関連
この記事へのTrackBack URL

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。