Windows
Git
メモ帳

Git for Windows のコミットメッセージの編集にメモ帳を使う方法とメリット

私はデフォルトの vi 使っているので関係ないのですが、布教のためには多くの選択肢があったほうがいいものです。

GUI のエディタを使いたいという場合でも「エディタの終了を検知」してコミットを行う Git の仕様を好まない人もいるでしょう。たとえば、お気に入りのエディタは起動したまま終了しないで使う、といった場合です。そのようなケースでは、普段使いのお気に入りエディタとコミットメッセージを書くエディタは別のものにしたいはず。「メモ帳なら普段は使わないし、起動・終了も軽いし」といった理由でメモ帳を選択するニーズは意外とあるかもしれません。

問題

ただ「エディタをメモ帳に設定」しただけの状態では入力した日本語が化けます。

他の選択肢

メモ帳で使うための準備

Git Bash 画面で以下のコマンドを実行すると、git commit 時のエディタがメモ帳になります。

git config --global core.editor notepad

ただし、このままでは日本語が文字化けします。

文字化け対策

メモ帳が開いたときに、以下のようなメッセージが表示されていると思います。

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
# ...

この状態でメニューから「名前をつけて保存」を選択して保存ダイアログを確認すると「文字コード」がANSIになっていると思います。

保存の際に「上書き保存」ではなく「名前をつけて保存」にして文字コードを「UTF-8」にすると、コミットメッセージが文字化けしないで登録できます。

もっと簡単に

しかしコミットメッセージを入力するたびに保存ダイアログを操作するというのは面倒です。

コミット時にメモ帳が開く際、最初から UTF-8 の雛形を開いてくれればいいのです。

そのために、まずは UTF-8 で書かれたコミットメッセージの雛形ファイルを作ります。

例えば上記のメッセージを日本語に訳したものをメモ帳で作成し、UTF-8 にして保存しておきます。一行目は空行にします 1

gitMsgForNotepad.txt
 
# 変更内容についてのコミットメッセージをここに記述してください。
# 行頭に '#' の記号が書かれている場合、その行は無視されます。
# メッセージが空のままなら、コミットを中止します。

あるいは、こちらのプレフィックスのチートシート を訳したものでもよいでしょう。

保存場所は目立たない場所がいいでしょう。私は「C:\Users\私\AppData\Local\Git\gitMsgForNotepad.txt」に保存しました(途中の存在しないディレクトリは作成します)。

繰り返しますが UTF-8 で保存してください。

ではこれをコミットメッセージの雛形として使うように設定します。

git config --global commit.template "~/AppData/Local/Git/gitMsgForNotepad.txt"

これで、メモ帳で日本語コミットメッセージを入力しても文字化けを防ぐことができます。

まとめ

以下をコピーして Git Bash に貼り付けることで上記の設定を一気に行います。

mkdir ~/AppData/Local/Git/
cd ~/AppData/Local/Git/
echo "" > gitMsgForNotepad.txt
echo "# 変更内容についてのコミットメッセージをここに記述してください。" >> gitMsgForNotepad.txt
echo "# 行頭に '#' の記号が書かれている場合、その行は無視されます。" >> gitMsgForNotepad.txt
echo -n "# メッセージが空のままなら、コミットを中止します。" >> gitMsgForNotepad.txt
git config --global core.editor notepad
git config --global commit.template "~/AppData/Local/Git/gitMsgForNotepad.txt"

戻したい

以下のコマンド(群)で設定を削除し、元に戻します。雛形ファイルは削除しません。

git config --global --unset core.editor
git config --global --unset commit.template

  1. このサンプルは表示のために、一行目に全角スペースを入れています。ご注意ください。