Shift-JIS のファイルの差分を見たくても、コンソールがUTF-8なので毎回文字化けして読めない。
diffのハイライトも表示したかったし、ページャも使いたかったから git diff <file> | nkf -w | pygmentize -l diff | less -R とかしてたけど、いちいち打つのがめんどくさいので普通の git diff で表示できるように設定したかった。
前提条件
- どのファイルが Shift-JIS のテキストファイルであるか指定できる
- 検証したのは Mac OS X
.gitattributes
.gitattributes に色々記述することで、ファイルにgit上の属性値をつけることができる。
*.txt diff=sjis
*.txt を扱うときには diff=sjis がセットされるようになるので、 git config 内のキーとして使える。
git config diff.<driver>.textconv
diff=<driver> 属性が設定されたファイルに対してdiffを実行する前にテキスト化するコマンドを指定する、という設定項目。
有名なところだと docx や xlsx などをテキスト化して差分を見るなどがあるが、今回はこれを文字コード変換に使ってみる。
$ git config diff.sjis.textconv "iconv -f sjis"
こうしておけばShift-JISのファイルを一度 iconv コマンドで文字コード変換してからdiffを取るようになる。
属性のついていないファイルはいつもどおりのdiffになるので、 git show などで複数のファイルが表示される時も安心。