おそらくはそれさえも平凡な日々

Gitのpost-receive Hookでブランチ名などを受け取ったりする

いろいろ調べてまとめようとしたら、以下によくまとまっていた。

http://stackoverflow.com/questions/7351551/writing-a-git-post-receive-hook-to-deal-with-a-specific-branch/13057643#13057643

標準入力に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させたかったのでこうなった。

created at
last modified at

2014-08-07T12:08:32+0900

comments powered by Disqus