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
などで複数のファイルが表示される時も安心。