SOFTELメモ

</> 技術者募集

【git】pushしたタイミングでコマンドを実行させる

問題

gitを使うと、「開発 → 共有リポジトリ → テスト環境」 のような流れで変更を反映するけど、「開発 → 共有リポジトリ」をやったタイミングで「共有リポジトリ → テスト環境」の反映も自動的にやってくれないかな?

git

答え

gitには、post-update, post-commitなどのフックがある。

/共有リポジトリ/hooks に該当する名前のスクリプトを書いて置いておけばよい。

例)誰かが共有リポジトリにpushしたら、同じサーバーに乗っているテスト環境にpullさせる。ユーザーはWebの実行ユーザーにしたい。

$ vi /path/to/git/repository/hooks/post-update
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".

cd /path/to/test/environment
sudo -u webuser /usr/local/bin/git pull /path/to/git/repository master


post-update スクリプトは、こういう書き方がよいかもしれない。

一般ユーザーで実行される予定で調整しておいて、対象のディレクトリに移動して、git pull。git pull するときに –git-dir=.git を忘れないように(error: cannot open .git/FETCH_HEAD: Permission denied のようなことを言われるかもしれない)。

#!/bin/sh

cd /path/to/project && /usr/bin/git --git-dir=.git pull

関連するメモ

コメント