git log、git diff、git showでの日本語の文字化けをまとめて対策

最終更新:2022-02-23 by Joe

新しくサーバーに開発環境構築して使い始める時、「git log」「git show」 「git diff」などを使うと、多くの場合、日本語が文字化けしてうまく表示できません。

具体的には、以下の2点がよく問題になります。

今回対応する問題:

  1. git diff、git log、git showとかのgitコマンドの出力が文字化けする
  2. 日本語のファイル名が文字化けする

上記を解決して、日本語を文字化けせず表示できるような対応を、さくっとまとめます。

Gitの日本語文字化けのよくある症状

まずは、(1)の症状です。

説明の簡単のため、「さくらレンタルサーバーを借りたデフォルト状態」を例にとって進めていきます。他のサーバーでも似たような状況ではないでしょうか?(推測)

少なくともさくらレンタルでは、初期状態がどんなかというと、git diffとかやると、下の画像のように「ESC」とかたくさん出力されてしまいます。

tmp

感じ悪いですよね。。git log やgit show でも、同じような文字化けが見られるはずです。

スクショ上で、「ESC」で表示されているものは、「文字化け」というよりは、エスケープコードで始まるバイト列(エスケープシーケンス(Wikiペディア))がうまく認識できていないのが原因みたいです。まずこれを対応します。

Gitで使うページャの設定

デフォルトのページャ設定

ページャの設定です。gitの設定ファイルをいじります。コマンドで、

git config --list

ってすると現在のgitの設定内容(=.gitconfigファイルの中身)が表示されるはず。基本はほぼまっさらか、あなたがすでに設定したかもしれない、user.name とかuser.emailとかが記載されている程度かと思います。

と、まあ名前とか今回はどうでも良いので、触れません。とりあえず今やるのは「ページャに関する設定」の追加です。

ページャ?

ページャ(pager)とは「ターミナル上にファイルの内容を表示して、スクロールしたりできるやつ」ですね(説明雑)。

ページャの選択肢としては、cat, less, more とかあるのは有名ですが、それぞれの詳細や違いはこちらの外部の記事を貼っておくので、知らない人は(興味があれば)ざっと見てみてください。

とりあえずここでは、lessを使います。

git config --global core.pager "less -cm"

「less」とページャを明示的に指定することで、エスケープシーケンスが認識されるようにななるはずです。

ページャは、more でもlessでも好きなのにすればいいようです。-mcは・・、まあ詳しくは上記のマニュアルみてください、特になくても大丈夫です。

git configコマンド

蛇足ですが、上記はコマンド「git config」からgitconfigファイルを書き換えましたが、vim ~/.gitconfig とファイルを開いて直接設定ファイルを編集しても、もちろんOKです。

.gitconfigファイルの中には、内に、こんな風に書かれていれば、大丈夫です。

[core]
  pager = less -cm

ファイル名の日本語文字化けへ対応

さて、gitconfigを触っているので、ついでに、ここで「日本語ファイル名の文字化け」対応をしてしまいます。

上記のファイル内の文字化けの症例とは異なりますが、git はデフォルト状態では「日本語のファイル名」をうまく表示できません。

下記はgit status の例ですが、こんなふうになります。CSSファイル名がおかしくなっているのがわかると思います。

これの解決のため、git config に、quotepath = false ってのも書いておくと、ファイル名に、日本語が文字化けする(正確にはエスケープされる)のを、あっさりと解決してくれるようです。

日本語ユーザはほぼ必要になる設定ですので、忘れず書いておきましょう。

[core]
  pager = less -cm
  quotepath = false

quatepath?

「quotepathってなんなのさ」って方のために、こちらに、GITの本家のマニュアルから、引用しておきますね。

core.quotePath
The commands that output paths (e.g. ls-files, diff), when not given the -z option, will quote “unusual” characters in the pathname by enclosing the pathname in a double-quote pair and with backslashes the same way strings in C source code are quoted. If this variable is set to false, the bytes higher than 0x80 are not quoted but output as verbatim. Note that double quote, backslash and control characters are always quoted without -z regardless of the setting of this variable.

ふむふむ、勝手な翻訳ですが、かいつまむと「diff などのファイルパスを出力するコマンドは、(-zオプションを付けてない時は)パスの中にある”unusual”な文字をバックスラッシュ付きのダブルクオーテーションで囲みます。」だそうです。

ふむふむ・・、たぶんこの「Unusual」って言われているのが日本語文字の事だな。これをfalseにして、この機能をオフすることで、って事だな、きっと。大体わかったつもりになれたので、次行きますね。

ついでにエディタの設定

さらについでにですが、gitconfig いじってるから、Editorも、Vimに明示的に設定します。

使っているサーバーによってはデフォルトが違うものが起動してしまう人もいるかもしれませんね、Emacsとか、UbuntuだとNanoとかですね。

筆者はvim以外は使わない(使えない)です(もちろんお好みでどうぞ)

[core]
  pager = less -c
  quotepath = false
  editor = vim

出力に色をつけておく・・。

ついでに・・・、完全に脱線ですが、git configいじるついで色をつけておきます。「 ui = true」って書けばOKです。

最終的に・・・

[user]
   name = Git Taro
   email = hoge@mojimoji.com   

[core]
  pager = less -cm
  quotepath = false
  editor = vim

[color]
  ui = true

みたいになってます。

いろいろ脱線したけど、Gitconfigの細かい設定が、きになる人は、ここ見て下さい。
Gitをインストールしたら真っ先にやっておくべき初期設定

ページャ(Less)の文字コード設定

さて、次です。

ここまでは「ページャをLessに(明示的に)指定した」という状態でした。が、それだけでは、lessの文字コードが最初utf8に設定されていない(場合がある)ようで、日本語の文字化けが完全には解決できませんでした。

いまこんな状態です。冒頭よりは改善した印象ですが、まだ読めないですね・・・。

temp

これの対応としては「Lessの文字コードを明示的に設定する」をやります。

Lessの文字コードを明示的に設定する

bash と csh 両方書いておきます。自分のシェルがbashなのか、cshなのか、何かわからない方は、「echo $SHELL」ってやるとわかります。

a) cshの方向け

シェルが、csh(=さくらレンタルサーバーのデフォルト)の時は、

vim ~/.cshrc

で、設定を開いて、中身に、

setenv LESSCHARSET utf-8

とか明示的にlessの文字コードを「utf-8」と指定してやればいいだけで、簡単に解決できるようです。

また脱線しますが・・、「setenv」はcshのコマンドですね。このコマンドで「.cshrc にsetenv LESSCHARSET utf-8と書き込む」というのがおきます。「vim ~/.cshrc」と打って、直接書き込んでも、もちろん構いません。

さて、おわったら、サーバーに設定を反映させる必用あるから、

source ~/.cshrc

とやります。

b) bash(zsh)のひと向け(マックの方とか)

一応、csh じゃなくて、bashの方(MacOSデフォルトは zsh)はこちらです。

vim ~/.bashrc

開いたら以下を記載:

export LESSCHARSET=utf-8

この設定を、サーバー反映します。

source ~/.bashrc

以上です!

どうでしょうか?だいたい、うまくいったんじゃないでしょうか? 日本語ちゃんとでましたか?わたしのさくらレンタルサーバーでは、でました。

less設定は「less 」「文字化け」とかでググれば、Lessにまつわる一般的な問題としていろいろでてきますね。などなど細かとこは各自でお願いしますね、とりあえずいまは、gitを早く使いたいだけなのです。。

サーバーのLocaleの設定

もし、まだ、うまくいかないかたへ。サーバーの言語設定、これ検索してもなかなかでてこないから、なかば諦めてたけど、ある日気づきました。

locale

ってコマンド打つと、設定がデフォルトのまま(=未設定)だった。

これ直すのは、いくつかやりかたありそうですが、どうやら、~/.login_confってファイルでも、特定のログインユーザについて設定できるけど、根本的にやりたいので、 .cshrcに設定を書き込みます。

vi ~/.cshrc

これを追記してしまえばよい。

setenv LC_CTYPE ja_JP.UTF-8
setenv LANG ja_JP.UTF-8

ポイントとしては、LESSCHARSETで設定したutf-8を設定しましたが、locale設定にutf-8ベースのロケールが設定されていないと、うまく動作しないことがあるようです。

おわったら、また反映:

source ~/.cshrc

bashの方も、似たような感じでお願いします(詳細は割愛)

ここまでで、この記事でお伝えできる対応に関しては、以上です。

git log, git diff, git show, git xxx、出力される日本語文字化け、治りましたでしょうか?改めサマりますとと、ポイントは

  • ページャを明示的に設定して、そのページャの文字コードを指定する
  • ファイル名の文字化けは、「quotapath」機能をオフする

ということでした。Windowsの方、sjisなどの文字コードが関係してうまく言っていないかもしれません。この記事でも対応をお伝えしたいけど、筆者は、win持っていないので・・・、ごめんなさい。

それでは、楽しいgit ライフを。


Gitと日本語と文字化けについて所管

これより以下、ただの感想と参考情報です。

レンタルサーバでGit文字化け対応した感想

さくらだけじゃなく、Xサーバーレンタル共有サーバーも日本語が初期状態でうまくつかえませんでした。X共有サーバはそもそもgit インストールがちょっとひと苦労だった気がします(詳細は忘れました)。レンタルサーバ借りるユーザ層では、あんまりgit使う人いないのでしょうかね。まあ徐々に増えていきそうです。

私自身は、安心のさくらインターネットのレンタルをよく使うんですが、新しく契約したユーザでいじるたびに、毎回上記の設定してます。さくらは、CentOS で、cshがデフォルトかと思います。bashに変えてもいいけど、まあどっちでもいいですね。

あと、「文字化け」についてもうすこし関連情報を細かいところ、下記にまとめておきます。

Git日本語・文字化けに関する参考サイト

いろいろ文字化けと日本語に関する情報を探す時、このページが大変参考なりました。包括的に書いてあるせいか、特定のワードでぐぐっても上位にこなくて見つけにくかったです。 FreeBSDで日本語環境(UTF-8対応)を整える

あと、 utf-8ならいんだけど、日本語を Shift-JISでエンコードしているような場合は、相変わらず日本語が文字化けするのではないでしょうか。Winの方とか。

これ直すのたぶんめんどうっぽいので、私は諦めました–ひたすらShift-JISを扱わないようにします。Windows95世代じゃないんだから、いまどきShift-jisは必要ないのではないでしょうか(という願いです。)いちお、こちらにshift-jis関連のキータの記事を貼っておきますね(http://qiita.com/mather314/items/a6b4bad59e2edd659dd4

その他に、参考にしたサイトはこちら: Git for Windowsにてgit diffで日本語が文字化けしないようにする方法のメモ 。こちらより抜粋:「すべてがUTF-8になれば幸せになれるかも」。そうですね、そう思いますね。わたしはマックでしたのでWinで、git bash みたいなやつ使っている方は、どうかがんばって下さい。

git  の文字化けについて、もうすこし突っ込んだ情報が欲しい方はこちらも見てみてください。情報が深すぎて私は読んでないです: git/gitで日本語を扱う方法

あと、gitじゃなくて、一般的な話文字コードについてマメ知識。こういうのは知っておいていいかもです。わたしは・・、そうですね、いつか読みます。 文字コードの考え方から理解するUnicodeとUTF-8の違い

あと、上記でも触れましたが、Gitマニュアル参考ページもやはりそれなりに参考なります。 Git のカスタマイズ – Git の設定。やはり原典はよいです。


などなど、いろいろ難しいですね。

設定内容は、開発とは本質的に関係ない部分なので、私としてはできればあまり深く考えたくないです。

以上です。