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が見られるようになる。