msysgit(いわゆる Git Bash)は Windows 上で git コマンドを実行するため bash シェル環境だ。
オールインワンで基本的なコマンドを備え、 ssh, perl, curl などのツールも入っているので、お手軽で便利だ。
かつては日本語を扱うのが難しかったが、1.8.3で bash で日本語を入力できるようになるなど、最近はだいぶ状況はよくなっている。
$ git commit -m '日本語OK'$ git log -1
Author: kumazo <kumazo@localhost.local>
Date: Mon Jan 13 00:00:00 2014 +0900
日本語OK
それでもまだいくつか設定変更は必要だ。
msysgit の日本語周りのノウハウはすでに多くの方が取り上げられているが、新旧の情報が散在し錯綜しているので、現状をまとめる意味でもここにメモしておく。
ここで取り上げるのは以下の設定項目。
- トウフ化
- ls で日本語ファイル名
- vim で日本語コミットメッセージ
- git status の日本語ファイル名
- gitk の diff の文字化け
トウフ化
もし、日本語文字がすべて□(トウフ)になってしまったらそれはコンソールのフォント設定の問題だ。
タイトルバーを右クリックー→プロパティ→フォントタブ→フォントで適切な日本語対応フォントになっているか確認する。
ここで、日本語フォントになっていなければ日本語フォントに変更すればよい。
しかし、日本語フォントになっていたとしても、あえて別の日本語フォントに変更する。
変更後は正常に日本語が表示されるようになる。
再度フォント設定を開き、フォントを元に戻してみる。
なぜか元のフォント設定でも正常に日本語が表示される。
そもそも「MS ゴシック」と「ラスターフォント」しか選択肢がなく、両方日本語対応しているはず。
いったんフォント設定を変更することで、それ以降はトウフ化は解消されるようだ。
なぜこうなるのか理由はわからない。
ちなみにフォントサイズを変更しただけでも同様の効果がある。
タイトルバーからの設定は一時的なものなので、これを保存するには、Git Bash のショートカットアイコンを右クリックし、同様の手順をふんで設定をしておく。
ls で日本語ファイル名
ls で UTF-8 ファイル名が ???? になるのは ls 固有の問題らしい。
以下のオプションをつければ日本語ファイル名が表示される。
$ ls --show-control-chars
いまいち納得がいかないが .bash_profile あたりにエイリアスを定義して、以後気にしないことにする。
alias ls='ls --show-control-chars'
vim で日本語コミットメッセージ
git commit 時にはデフォルトで同梱の vim エディタが起動する。
どうせなら vim で日本語コミットメッセージを編集したい。
git 同梱のvimの文字コード関連の初期設定は以下のようになっている。
encoding=cp932
termencoding=
fileencoding=
filesencoding=
この状態で日本語を入力してみて、文字化けしなければ OK。
文字化けするようなら、以下の vim 設定を試す。
:settermencoding=cp932
これで日本語入力しても文字化けしないはず。
それでも文字化けするのが Windows 8 。
どうも、Windows 8 環境では 2バイト文字の最初の 1バイトしか拾えていないようだ。
これは vim に限らず、Windows 8 以降のCUIアプリ全般でみられる問題らしい。(下リンク参照)
vim 側で対応されなければどうにもならないようなので、Windows 8 環境では当面これまで通りcore.editor に外部エディタを設定するしかない。
さて、vim 経由でコミット後ログを確認すると正しく日本語が表示されるはずだ。
vim の内部エンコーディングがcp932(SJIS)だが、コミットメッセージは文字化けしない。
どこかで iconv ががんばっているからだろう。
しかし、コンフリクト時など vim でソース修正をすることもあるのなら、ファイル用の文字コードも合わせて設定しておいたほうがいいだろう。
新規ファイルは fileencoding の文字コードで保存される。
:setfileencoding=utf-8
既存ファイルの文字コードは自動判別される。
fileencodings でその優先順を指定する。
とりあえず使いそうなものだけ。
:setfileencodings=utf-8,cp932
これらをまとめて $HOME/.vimrc に保存しておく。
setencoding=cp932
settermencoding=cp932
setfileencoding=utf-8setfileencodings=cp932,utf-8
git status の日本語ファイル名
git status や git diff などで表示される日本語ファイル名は "\nnn" にエスケープされてしまって読めない。
以下の設定を追加することで日本語ファイル名が表示されるようになる。
$ git config --global core.quotepath false
gitk の diff の文字化け
gitk で diff 表示が文字化けしたら、ソースファイルの文字コードに合わせて設定変更する。
デフォルトはcp932(SJIS)。
$ git config --global gui.encoding utf-8
参考
[傾向と対策] なぜ、Windows 8 から多くのコンソールアプリケーションで突如日本語が入力できなくなったのか MHI 5.0
viで日本語の文字コードを自動判別玉虫色に染まれ!
git/gitで日本語を扱う方法 TOBY SOFT wiki