[git] branch名に、チケット番号仕込むと、良い事あった。
本日、ちょこっとつぶやきで、
gitのブランチ名にチケット番号を仕込んでおくと、コミットログ書く時に確認しに行かなくてすむ。
— risk - 鼻メガネさんさん (@riskrisk) 1月 18, 2012
っていったら、神様から
@riskrisk も一歩進んで、チケット番号をコミットログに自動的に埋め込んじゃうようにしませう!
— 残念なbleis(実際残念)さん (@bleis) 1月 18, 2012
って言われたので、やってみることにした。
最初は、gitのソース追わないとダメかなぁと思ってたけど、
このブログの名前つけた人から
@bleis @riskrisk masterブランチへのコミットを拒否、かー。ツールがチケット駆動開発を加速させますね。すばらしい。github.com/bleis-tift/Git…
— Takayuki KONDOさん (@cointoss1973) 1月 18, 2012
この発言があったので、あぁフックスクリプトがあるということに気がつく。
方法
前提条件として、ブランチ名には、
チケット番号branch名
という、先頭にチケット番号が入ってるという規則を持ってつけてることにします。
prepare-commit-msg の作成
リポジトリのルートにある、.gitの中に、hooks というディレクトリがあるので
その中の、prepare-commit-msg.sample から prepare-commit-msg を作ります。
んで、実行権限を与えてください
cd .git/hooks/ cp prepare-commit-msg.sample prepare-commit-msg chmod +x prepare-commit-msg
これで、prepare-commit-msg が動くようになります。
prepare-commit-msg の編集
中身はシェルスクリプトなので、ファイルを開いて実行される部分を全部消しときます。
んで以下のスクリプトを追加します。
if [ "$2" == "" ] ; then mv $1 $1.tmp echo "refs #`git branch | grep "*" | awk '{print $2}' | sed -e "s/^\([0-9]*\).*/\1/g"`" > $1 cat $1.tmp >> $1 fi
内容的には、テキストエディタを使ったコミットは、第二引数が空になるようなので
第二引数が空の場合だけログを仕込みます。
ちなみに、-mでコミットする場合は、"message" が入るので -m の時でも
メッセージ入れたい人は、そんな風に修正するとできますw
さて、コミットログに仕込むログは、
「refs #チケット番号」
git branch で * を検索して、awk で branch名だけ取り出して、
先頭から数字だけsedで抜き出す。
編集が出来たら、保存してください。
なんかコミットしてみる
なんかブランチ作ってコミットしてみると、
なんかそれっぽいコミットログがでると思います。
僕は、
git add .
git commit
git reset HEAD^
を延々と繰り返してました。
出来上がっても、楽しくて繰り返してました。
注意事項
これ、refs って思いっきり書いてますが、refs は、
trac と連携してるときに、チケット番号を参照させるやり方です。
(他のBTSってどうやるんだろ、よくしりません(汗))
あと、「コミットやーめた」と思って、そのまま終了すると、
refsの行が生きてるので、普通にコミットされます(汗
そんなわけで、よくコミットをabortをする人は、
echo "<b>#</b>refs #...
にしとくと、いいかもしれません。
あと、チケット番号入れない場合は、チケット欄が空っぽ(refs #)になるので
それが嫌な方は、チケット番号取得処理結果を、一度変数に突っ込んで
ifしてください。
でも、それが出てたらチケット番号入れようって気になるかなぁ・・・ならんか・・・