共同開発などでブランチ名をコミットメッセージに入れたい場合があったので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 | if git branch | grep '*' | grep 'xxx'; |
を挿入し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)で必要な、共通箇所以外の部分を抜き出しています。