古来より(古来っていうほど昔なのか?)色んな人が記事にしるので今更感はありますが、20記事以上見てきて個人的に改良したシンプルだと思うものを忘備録兼ねて挙げておきます。
.git/hooks/prepare-commit-msg
を作り以下を記述。
COMMIT_EDITMSG=$1
MODE=$2
if [ "$MODE" = "" ] || [ "$MODE" = "message" ] ; then
TICKET_NUMBER=`git branch | grep "*" | awk '{print $2}' | perl -nE 'say $& if /[0-9a-zA-Z_-]+$/'`
if [ "$TICKET_NUMBER" != "" ]; then
# 変更を加える前に退避。
mv $COMMIT_EDITMSG $COMMIT_EDITMSG.tmp
# 退避ファイルの1行目先頭にチケット番号を付与して、本来のファイルに上書きする
sed '1s/^/'"[$TICKET_NUMBER]"' /g' $COMMIT_EDITMSG.tmp >> $COMMIT_EDITMSG
fi
fi
% touch test.php
% git add .
% git commit # これは$MODEの条件通らないのでチケット番号付与されません
% git commit -m ":wrench: xxx実装"
こういうブランチ名なら | こうコメント付与される |
---|---|
feature/XXX-999 | [XXX-999] xxx実装 |
bug/XXX-999 | [XXX-999] xxx実装 |
feature/XXX-999_add_user_column | [XXX-999_add_user_column] xxx実装 |
feature/XXX-999_notify_purchase | [XXX-999_notify_purchase] xxx実装 |
feature/yamada/XXX-999 | [XXX-999] xxx実装 |
正直、課題管理ソフトが必要なのはチケット番号であるXXX-999
の部分だけなのでそれ以外は不要。
なのですが、、、課題管理ソフトによってはチケット番号のフォーマットが
123456789
かもしれないし(これはasana)
#123456789
かもしれないし(これはpivotal)
XXX_123456789
かもしれないし
XXX-123456789
かもしれない。(これはJIRA)
最後2つの可能性を考慮すると_
と-
(アンスコとハイフン)は正規表現に含める必要があるんですよね。
そうすると意図しないブランチ名、例えば
XXX-999_add_user_column
XXX-999_notify_purchase
のようなブランチ名からチケット番号を作り出すときにブランチ名がそのままチケット番号になっちゃうのです。
じゃあ正規表現で最後が数値で終わってることを条件にすれば良くないか?
う〜ん、課題管理ソフトによってはチケット番号のフォーマットが
123456789-xxx
とか123456789_xxx
なものだってあるかもしれないだろう?
だからもうプログラム側で頑張るのはやめて各々に運用でカバーしてもらうことを想定としたよ。
この仕組みは弊社の他のPJでも使えるのでcomposerで導入できるようにライブラリ化しようと思う。
ライブラリ化したらお知らせ更新しますのでLGTMとストックしてくれると励みになります。
この正規表現でならいけるんじゃない?的なアドバイスありましたら教えていただけますと参考にライブラリ改良していきます。
ちなみにsourceTreeなどのgitクライアントソフトからでも使えます。
元ネタはこちら👇
おやすみ。
2022/4/29追記
ライブラリ化しました。