0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

git hook を使って push時に特定の処理を実行する

Posted at

内容

リモートリポジトリ側で 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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?