やりたいこと
feature/${チケットID}-awesome-function
みたいなブランチ名でコミットした時に、自動でコミットメッセージのプレフィクスに [#チケットID]
を挿入しておきたい。
実行環境に左右されたくなかったので、bash / zshだけで実装したい。
githooks prepare-commit-msg を使う
#!/bin/sh COMMIT_MSG_FILE=$1 CURRENT_BRANCH=$(git rev-parse --abbrev-ref @) if [[ $CURRENT_BRANCH =~ ^[^/]+/([0-9A-Za-z]+)[-|_]?.+$ ]]; then TICKET_ID=${BASH_REMATCH[1]} if [[ -n "$TICKET_ID" ]]; then echo "[#$TICKET_ID] $(cat $COMMIT_MSG_FILE)" > $COMMIT_MSG_FILE fi fi
以下解説。
$1
には$git commit
した際にエディタでコミットメッセージを入力する際のメッセージ。 sampleに倣って変数に格納した。- 現在のブランチ名は
git rev-parse --abbrev-ref @
で取得できる BASH_REMATCH[1]は
正規表現でマッチした1番目のキャプチャを取得する。この場合にはifの条件式内の()
で括った箇所。- チケットIDがうまく取得できていたら、オリジナルのコミットメッセージファイルの中身の先頭にチケットIDを追加したものを出力する。なお、きちんと
> $COMMIT_MSG_FILE
しないとエディタ上に反映されない
オリジナルのサンプルはこちら git/hooks--prepare-commit-msg.sample at master · git/git
できた
こんな感じになる。
いいですね。

- 作者:Jon Loeliger
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/02/19
- メディア: 大型本