2014年5月2日金曜日

Git for Windowsにてgit diffで日本語が文字化けしないようにする方法のメモ

背景


ソースのコメントは普段は英語でしか書かないし、日本語で書くときはgitkで差分を見ているのでそれほど気にしていなかったのですが、どうしてもコマンドラインで完結させたいという人がいたので方法を探してみました。

まず前提として、UTF-8で書かれた日本語は基本的に化けません。
2011年ごろまでのGit for Windowsは、ファイル名に日本語を使うとひどいことになりましたが、今はファイル名も含めてすべてUTF-8になっていると思います。

ここでの問題は、Shift_JISやJIS(ISO-2022-JP)やEUCな内容のファイルです。昔からメンテナンスしているコードやHTMLには残っている場合があるでしょう。本当に残しておく必要がなければgit filter-branchで全履歴の文字コードをUTF-8へ変換してしまう手がお勧めですが、それはまた別の話。

対策

Shift_JIS用

git config --global alias.dis '! f() { git diff $@ | iconv -f shift_jis;};f'

というコマンドを一度打っておき、"git dis"と打つとSJISが化けない版のdiffが出る。
"git diff"は引き続き化け続ける。

JIS(ISO-2022-JP)用

git config --global alias.dij '! f() { git diff $@ | iconv -f ISO-2022-JP;};f'

EUC-JP用

git config --global alias.die '! f() { git diff $@ | iconv -f EUCJP;};f'

なお、iconv.exeがパスの通る場所に必要です。Git for Windows (MSYSGit) 1.8.4には同梱されていたような気がしますが、私の環境にはどこかから持ってきたやつが生きているだけかもしれません。コマンドを適切に書き換えてやればnkfでもOKのようです。

ただし、diffへの色付け(追加行が緑、削除行が赤など)は失われてしまいます。


所感


一応上記の対策で一定の効果は見られますが、文字コード関連の問題は、やりたいことの本質に関係ないわりに時間を取られるという点で、昔からちっとも進歩した気がしません。すべてがUTF-8になれば幸せになれるかもしれませんが、それにはまだまだ時間がかかりそうです。

0 件のコメント:

コメントを投稿