11
11

More than 5 years have passed since last update.

issues/XXXXで始まるブランチにいたらコミットメッセージにrefs #XXXXをつけるgit hook

Posted at

最近自分の関わっているプロジェクトではgitのブランチに issues/XXXX-description-of-branch という名前を付ける慣習になっている。

issues/XXXXの部分をコピーして貼り付ければredmineのURLに貼り付けて開けるため。

redmineと言えば、コミットメッセージにrefs #XXXXと書けばチケットと紐付いたりしてくれるのだが、これを書くのを毎回忘れるので、issues/XXXXというブランチにいたら自動的にコミットメッセージに含めてくれるようにした。

こちらのブログを参考にして改造した。

#!/bin/sh
# .git/hooks/prepare-commit-msg に置いて実行権限をつける

# git rev-parse --abbrev-ref HEAD は現在のブランチ名を出力するが、rebase中だとHEADになったりする
issue="`git rev-parse --abbrev-ref HEAD | grep "issues/[0-9]\+" | perl -pe 's%^issues/([0-9]+).*%$1%'`"

case "$2,$3" in
  merge,)
    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1"
    ;;

  message,)
    if [ "$issue" != "" ]; then
      echo "refs #$issue" >> $1
    fi
    ;;

  ,)
    if [ "$issue" != "" ]; then
      mv $1 $1.tmp
      echo $'\n\n'"refs #$issue" >> $1
      cat $1.tmp >> $1
    fi
    ;;

  *)
    ;;
esac

.git/hooks/prepare-commit-msg の引数の$1はコミットメッセージの入ったファイル名が入る。$2は、git commit -m だと"message"になり、エディタが開かれる場合は空になる。rebase -iして自動でコミットを継ぎ足している間も空文字になるので、この場合は無視しないといけない。

11
11
0

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
11
11