feed

2014年07月26日, 編集履歴

GitでUTF-16なテキストファイルのdiffを表示する

 UTF-16でエンコーディングされたテキストファイルをgit-diff等で表示することを考える。

.gitattributesをリポジトリィに追加する

 .gitattributesファイルを用いることで、特定のファイルやディレクトリィ単位で個別のdiffツールやmergeツールを用いるといった設定を行うことができる。

 リポジトリィに以下のような内容の.gitattributesファイルを追加する。

*.txt diff=utf16

 この場合、.gitattributesファイルを配置したディレクトリィ以下の.txt拡張子を持つファイルのdiffに、utf16という名前のフィルタを用いる指定をしたことになる。指定したフィルタがどういう動作を行うのかは次項で設定する。

フィルタの動作を設定する

 前項で指定したutf16フィルタが実行する内容を設定する。

$ git config diff.utf16.textconv 'iconv -f utf-16 -t utf-8'

 このようにすると$GIT_DIR/configファイルに、

[diff "utf16"]
	textconv = iconv -f utf-16 -t utf-8

のような記述が足される(このファイルを直接編集しても良い)。

 これで、utf16フィルタを指定されたファイルのdiffを表示する際に、iconvでエンコーディングの変換処理が噛まされるようになり(iconvは文字エンコーディング変換プログラムで、OS Xに始めから入っている。-fオプションで入力エンコーディング、-tで出力エンコーディングを指定)、diffが見られるようになる。

参考