Mercurial で binary を扱う2008年10月16日 13時04分32秒

古来から、いわゆる非文字形式のファイルは色々と厄介事が多い。ftp しかり、RCS や CVS など、異機種間でデータをやりとりする時や、テキストを前提に動いているプログラムは何かと問題が発生する。 いや、ASCII のみの文書ですら、開くのに一苦労することもある。UNIX、Macintosh、そして Windows で改行を示す文字が違うのだから。

特に、SCM を使う時になると、CVS などでの経験上からバイナリ形式のファイルをどのように扱うのかが気になる。使う前に注意深く調べておかないと、悲惨な目にあうかも知れないからだ。

Mercurial では、バイナリ形式のファイルは問題なく扱えるそうだ。

チュートリアルに目を通した。Mercurial では、ファイルに NUL があるかでバイナリファイルかどうかの判定をするそうだ。 つまり、0 を含むバイトが存在すると、バイナリファイルとして見なされる。外部プログラムである、マージコマンド以外に、この法則が当てはまる。そして、実はこの法則が diff から取って来たものだそうだ。

バイナリファイルだと認識すると、diff などの人の読める形式を出力するコマンドの動作が変わるそうだ。

そして、バイナリファイルであっても、インクリメンタルで保存して履歴を残してくれるらしい。

外部コマンドになるマージのプログラムがバイナリを扱えないらしい。しかし、バイナリをマージしても、意味のある結果にならないので、特に問題ではない。新旧のどちらかから選択する作業が必要になるだけだ。

Mercurial は何も特別な操作をしなくても、何の問題も無くバイナリファイルを入れる事が出来るという結論になる。