LoginSignup
0
1

More than 1 year has passed since last update.

JIRASoftwareなどのチケット番号をgit commit時に自動でコメントに付与する方法

Last updated at Posted at 2022-04-25

古来より(古来っていうほど昔なのか?)色んな人が記事にしるので今更感はありますが、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] :wrench: xxx実装
bug/XXX-999 [XXX-999] :wrench: xxx実装
feature/XXX-999_add_user_column [XXX-999_add_user_column] :wrench: xxx実装
feature/XXX-999_notify_purchase [XXX-999_notify_purchase] :wrench: xxx実装
feature/yamada/XXX-999 [XXX-999] :wrench: 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追記

ライブラリ化しました。

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1