Gitのpost-receive Hookでブランチ名などを受け取ったりする
いろいろ調べてまとめようとしたら、以下によくまとまっていた。
標準入力にoldrev, newref, refnameが空白区切りで入ってくるのでそれを読み出す。push --allなどで複数のブランチが一度にpushされた場合には複数行の入力が入ってくる。
なので、masterブランチがpushされ、前回からarticleディレクトリが更新されていた場合に作業をさせたい場合は以下のようにすれば良さそうであった。
#!/bin/bash
# 標準入力を一行づつ読み出す
while read oldrev newrev refname; do
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
# masterブランチで、articleディレクトリが更新されていたら何らかの作業を行う
if [[ $branch == "master" && $( git diff --name-only $oldrev $newrev -- article ) ]]; then
# Do something
fi
done
前回のエントリーに絡めて、必要なときだけriji publish
させたかったのでこうなった。