2012年6月20日水曜日

gitのpost-updateフックでブランチ名を取得する

gitでフックする時のお話。

gitの運用で、こんな感じでやる場合があります。

  1. 自分の作業用ブランチで開発作業
  2. 開発が終わったらリモート(中央リポジトリ)にプッシュ
  3. プッシュされたプログラムをデプロイ

2と3の間を自動化するために、post-updateフックなんかを使ったりするのですが、このシェルスクリプトの中でプッシュされたブランチ名を判断して処理したいことがありました。

たとえば、リリース用ブランチ、ステージング用ブランチ、開発用ブランチの3種類のブランチがリモートにあるとして、リリース用とステージング用は、確認してから手動デプロイしたいけど、開発用ブランチだけはプッシュされた後にすぐにプログラムをデプロイしたい、という場合なんか。

で、本題ですが、post-updateフックのシェルスクリプトには、第一引数に完全なブランチ名が渡ってくるようです。

たとえば

git push origin master

としたら、post-updateフックの第一引数には

refs/heads/master

という値が渡ってくるようです。

この値からブランチ名だけを取り出すために以下のようにします。

BRANCH=$(git rev-parse --symbolic --abbrev-ref $1)

こうすることで、$BRANCHの中にブランチ名が入ります。

あとは、この変数で条件分岐などをやればいいだけ。


※参考
http://stackoverflow.com/questions/7331519/find-git-branch-name-in-post-update-hook