内容
リモートリポジトリ側で git hook を使って、
push を検知したときに何かしらの処理を行うための設定である.
手順自体は後述のサイトそのままに近いが、何かしらの補足にはなるかと思う.
手順
ここでは以下とする.
・サーバサイドの Git リポジトリ置き場を「${RD}
」とする.
・push を検知したいリポジトリを「A.git
」とする.
1. ${RD}/A.git/hooks/post-receive を作成する
$ sudo touch ${RD}/A.git/hooks/post-receive
$ sudo chmod +x ${RD}/A.git/hooks/post-receive
2. ${RD}/A.git/hooks/post-receive に処理を書いていく
下記のコードは次の処理をする
・「ブランチ」「コミットID」「直前のコミットID」を取得する.
・a.txt が更新されていれば「git diff 〜 a.txt」をする.
なお、push するたびに echo によるログが出るので必要に応じて塞ぐこと.
実際の業務では、push を検知したら Jenkins に対して cURL で非同期による
ジョブ実行をさせている.
#!/bin/bash
# デバッグ用ログとして表示するリポジトリ名を定義する.
# 本例だと A.git と表示されるはずである.
BN=`basename $0`
# 標準入力を一行づつ読み出す
while read oldrev newrev refname X Y Z; do
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
# push 前のリビジョン
echo "[`date +"%Y/%m/%d-%H:%M:%S"`][$BN] oldrev=<$oldrev>"
# push 後のリビジョン
echo "[`date +"%Y/%m/%d-%H:%M:%S"`][$BN] newrev=<$newrev>"
# ブランチ名
echo "[`date +"%Y/%m/%d-%H:%M:%S"`][$BN] BRANCH=<$branch>"
if [[ $( git diff --name-only $oldrev $newrev -- a.txt ) ]]; then
# 何か処理をする. ここではリビジョン間での差分を表示しているだけである.
git diff $oldrev $newrev -- a.txt
fi
done
参考にしたサイト
URL |
---|
https://songmu.jp/riji/entry/2014-08-07-post-receive-branch.html |
https://stackoverflow.com/questions/7351551/writing-a-git-post-receive-hook-to-deal-with-a-specific-branch/13057643#13057643 |