歴史的経緯など、やんごとなき事情により、現在でも文字コード Shift JIS の案件があります。あるところには、あります。
そういった UTF-8 以外の文字コードに対して git を使用した場合、diff が文字化けして読めない!!! といった事態が発生します。
その対処方法です。
(Mac でしか検証していませんが) 以下の方法で、ターミナルでも SourceTree でも、SJIS の差分の文字化けが解消できました。
設定
.gitattributes
ファイルと、config の textconv 設定を利用します。
まず、プロジェクトのルートディレクトリに、 .gitattributes
ファイルを作成。
今回は拡張子 html のファイルはすべて Shift JIS とみなし、以下のように記述します。
*.html diff=sjis
これは拡張子 html のファイルには、差分表示時に sjis
というフィルタを使え、という設定です。
続いて、sjis
という差分表示用のフィルタを定義します。
$ git config diff.sjis.textconv "iconv -f sjis"
Mac には最初から文字コード変換コマンドとして iconv が入っています。こちらを利用し、iconv コマンドで Shift JIS を UTF-8 に変換してから diff を表示せよ、という設定になります。
上記2つの組み合わせで、拡張子 html のファイルの差分は、iconv によるコード変換を通した結果が出力されるというわけです。
ちなみに、さきほどの git config
コマンドにより、.git/config
ファイルには以下のような設定が追記されます。
[diff "sjis"]
textconv = iconv -f sjis
結果
いけたー 🙌
SourceTree でもいけたー 🙌