git diff や git show でShift-JISのファイルを扱う

  • 26
    Like
  • 0
    Comment
More than 1 year has passed since last update.

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上の属性値をつけることができる。

.gitattributes
*.txt diff=sjis

*.txt を扱うときには diff=sjis がセットされるようになるので、 git config 内のキーとして使える。

git config diff.<driver>.textconv

diff=<driver> 属性が設定されたファイルに対してdiffを実行する前にテキスト化するコマンドを指定する、という設定項目。

有名なところだと docxxlsx などをテキスト化して差分を見るなどがあるが、今回はこれを文字コード変換に使ってみる。

$ git config diff.sjis.textconv "iconv -f sjis"

こうしておけばShift-JISのファイルを一度 iconv コマンドで文字コード変換してからdiffを取るようになる。
属性のついていないファイルはいつもどおりのdiffになるので、 git show などで複数のファイルが表示される時も安心。

参考

Git - Gitの属性