Git

Git / SourceTree で、Shift JIS ファイルの差分を文字化けなく表示する

歴史的経緯など、やんごとなき事情により、現在でも文字コード Shift JIS の案件があります。あるところには、あります。

そういった UTF-8 以外の文字コードに対して git を使用した場合、diff が文字化けして読めない!!! といった事態が発生します。

スクリーンショット 2018-09-10 18.01.51.png

その対処方法です。


(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


結果

いけたー 🙌

スクリーンショット 2018-09-10 18.02.05.png

SourceTree でもいけたー 🙌

スクリーンショット 2018-09-10 18.29.42.png


参考