こいばな - riskriskと時々鼻メガネ -

正式名称は「どすこい!鼻メガネ会長のいつでも土俵際!」です。ソフトウェア開発に関することを書いています。

[git] branch名に、チケット番号仕込むと、良い事あった。

本日、ちょこっとつぶやきで、


っていったら、神様から


って言われたので、やってみることにした。

最初は、gitのソース追わないとダメかなぁと思ってたけど、
このブログの名前つけた人から


この発言があったので、あぁフックスクリプトがあるということに気がつく。

方法

前提条件として、ブランチ名には、

チケット番号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してください。

でも、それが出てたらチケット番号入れようって気になるかなぁ・・・ならんか・・・