人生シーケンスブレイク

シーケンスブレイクとは

コミットメッセージに自動でチケットIDを入れたい

やりたいこと

feature/${チケットID}-awesome-function みたいなブランチ名でコミットした時に、自動でコミットメッセージのプレフィクスに [#チケットID] を挿入しておきたい。

実行環境に左右されたくなかったので、bash / zshだけで実装したい。

githooks prepare-commit-msg を使う

Git - githooks Documentation

#!/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

できた

こんな感じになる。

f:id:ShineSpark:20200213015624p:plain

いいですね。

実用Git

実用Git