IntelliJなどでコミットする時に、デフォルトで前回のコミットメッセージが出ているのがなかなか便利なので、それをコマンドラインのgitのコミットでもやってみた。
prepare-commit-msg
hookを使って実現する。
前回のコミットメッセージにしたくないこともあるので、デフォルトではコメントとして表示することにする。
環境
- Mac OS X Yosemite 10.10.5
- Git 2.11.1
gitテンプレートディレクトリを作成
特定のレポジトリではなく、PC上で扱う全てのレポジトリのコミットをhookするため、グローバルの.gitテンプレートディレクトリを準備する。
(なお、特定のレポジトリでだけhookしたい場合は、以下で作るpre-pushファイルをレポジトリの.git/hooks/
におけばよい)
mkdir -p ~/.git_template/hooks
.gitのテンプレートに.git_templateを指定
git config --global init.templatedir ~/.git_template/
これで新たにgitレポジトリを作ったりcloneすると.git_templateディレクトリの設定が有効になる。
hookファイル作成
vi ~/.git_template/hooks/prepare-commit-msg
内容は以下のようにする。
#!/bin/sh
if [ "$2" == "" ] ; then
git log > /dev/null 2>&1
# 初回のコミットじゃなかったら
if [ $? -eq 0 ]; then
# 前回のコミットメッセージをデフォルトに設定
echo "\n# `git --no-pager show -s --format=%B HEAD | awk -v RS='\n' -v ORS='\n# ' '{print}'``cat $1`" > $1
fi
fi
内容
$1
がコミットメッセージ用のファイル名になっている(.git/COMMIT_EDITMSG
など)。
git log > /dev/null 2>&1
↑初回のコミットかどうかの判定用。
git --no-pager show -s --format=%B HEAD
↑一つ前のコミットメッセージ
awk -v RS='\n' -v ORS='\n# ' '{print}'
↑改行を「改行# 」に変換。
hookファイルのパーミッション変更
パーミッションを変えて実行可能にする
これをしないとhookされない。
chmod +x ~/.git_template/hooks/prepare-commit-msg
結果
以上の設定をすると、commitする際に
1
2 # first commit
3 #-
4 #-
5 # Please enter the commit message for your changes. Lines starting
6 # with '#' will be ignored, and an empty message aborts the commit.
7 # On branch master
8 # Changes to be committed:
9 #»------new file: b.txt
10 #
のように前回のコミットメッセージがコメントとして表示されるようになる。
参考
- 「githooks」 https://git-scm.com/docs/githooks
- 「issue番号を勝手にcommit commentに入れてくれるやつ」 http://qiita.com/jumbOrNot/items/9e63f4835b9335cbaf22
- 「コミットログに自動的にイシューナンバーを入れるGit Hooks」 http://mawatari.jp/archives/issue-number-to-the-commit-message-automatically
- 「How to make git log not prompt to continue?」 http://stackoverflow.com/questions/7736781/how-to-make-git-log-not-prompt-to-continue
- 「標準出力と標準エラー出力を闇に葬る」 http://unskilled.site/%E6%A8%99%E6%BA%96%E5%87%BA%E5%8A%9B%E3%81%A8%E6%A8%99%E6%BA%96%E3%82%A8%E3%83%A9%E3%83%BC%E5%87%BA%E5%8A%9B%E3%82%92%E9%97%87%E3%81%AB%E8%91%AC%E3%82%8B/
- 「改行コード変換をAWKで」 http://qiita.com/mori_taksi/items/170b59fd7340330f1e6f