GitHookでブランチ名の一部をコミットメッセージに組み込んでみた

共同開発などでブランチ名をコミットメッセージに入れたい場合があったのでGitHookを使って自動的に入力されるようにしました。

※今回は、ブランチ名に共通した文字列が含むことを前提としています。

GitHookとは?

  • Gitで、特定のアクション(git branchなど)が実行されたときに、スクリプトを実行する機能です。

やり方

肝心のスクリプトを実行するファイル群は、 .git/hooks ディレクトリにあります。

1
cd [gitディレクトリ]/.git/hooks

今回はコミットメッセージを編集することが目的なので、hooksディレクトリにあるcommit-msg.sampleを編集します。

まず、ファイル名を編集します。

1
mv commit-msg.sample commit-msg

編集後、

1
vi commit-msg

でファイル閲覧モードに切り替えてください。

編集モードに変更したら、

1
2
3
4
5
if git branch | grep '*' | grep 'xxx';
then
NAME=$(git branch | grep '*' | sed 's/* //' | sed 's/xxx_//')
echo '【'"$NAME"'】'$(cat "$1") > "$1"
fi

を挿入しEscキーをクリック後、:wqで保存してください。

保存後、ブランチ名がxxx_testのようなもので検証してみましょう。

ブランチ名がxxx_hogeのとき、【hoge】テストといったコミットメッセージを自動的に作成することができます。

解説

commit-msgファイルに挿入した一行目のif条件の1つ目git branchで、該当プロジェクトでローカルで作成したブランチの一覧を取得しています。

2つ目grep '*'で現在のブランチを取得。

3つ目grep 'xxx'で現在のブランチの名前にxxxが含まれているかチェックしています。

チェックを通過すると、最初のthen以下が読み込まれます。

NAME変数に該当ブランチの必要な箇所の格納をしています。

git branch | grep '*'で同様に現在のブランチを取得し、二回のsed(PHPでいうstr_replace)で必要な、共通箇所以外の部分を抜き出しています。

参考