Gitのメッセージフックでブランチに対応するJIRAのチケットタイトルを自動入力する
必要なもの
プロジェクトにインストール
-
husky -
devDependencies
にインストールしましょう。
最初にやること
当たり前ですが、JIRAにログインしておきます。
$ jira login
フックファイルを作成
プロジェクトの任意の場所に prepare-commig-msg
を作成します。場所やファイル名は何でもいいですが、実行時の作業ディレクトリは package.json
があるディレクトリになります。
(git root)
└── app
└── package.json
今回はこのように、レポジトリのルートディレクトリが package.json
でなく、ブランチ名が category/ticket-(チケット番号)
のように命名されていると仮定します。
prepare-commit-msg
#!/bin/sh
# husky の作業ディレクトリに注意してください。
# COMMIT_EDITMSG はレポジトリのルートディレクトリが作業ディレクトリである場合を想定しているので、今回は少しいじります。
COMMIT_EDITMSG="../${1}"
TYPE="$2"
[ -n "$TYPE" ] && exit
# .git ディレクトリが作業ディレクトリに存在しないのでオプションで指定します。
ticket_ref="$(git --git-dir=../.git symbolic-ref HEAD | grep -Poe '(?<=/)ticket-\d+$')"
[ -z "$ticket_ref" ] && exit
ticket_summary=''
# jira が PATH に含まれている場合
if command -v jira 1>/dev/null
then
# go-jira の標準出力からサマリーを抜き出しています。JQLなどでもっと賢くできるかもしれない。
ticket_summary="$(jira view "$ticket_ref" 2>/dev/null | grep -Poe '(?<=summary: ).*$')"
fi
sed -i "1i${ticket_ref} ${ticket_summary}\n" "$COMMIT_EDITMSG"
フックの設定
package.json
にスクリプトを追加します。フックファイルへのパスは適宜読み替えてください。
{
"scripts": {
"preparecommitmsg": "path/to/prepare-commit-msg ${GIT_PARAMS}"
}
}
使ってみる
$ git commit
コミットメッセージの入力がこのようにタイトル付きで始まります。
ticket-01234 チケットのタイトルゴニョゴニョ
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# ...
困ったこと
- Node経由なので、フックの起動自体が非常に遅い。JIRAのチケット情報の取得も遅い。しかし自分でブラウザを開いてコピペするよりマシ。
- コミットしたくない場合には通常はコミットメッセージを編集せずに閉じるのだが、メッセージが空ではないため、そのまま閉じるとコミットされてしまう。(キャンセルが面倒くさい)
Author And Source
この問題について(Gitのメッセージフックでブランチに対応するJIRAのチケットタイトルを自動入力する), 我々は、より多くの情報をここで見つけました https://qiita.com/sei40kr/items/71b7993fe8fa00d130a5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .