【git】pushしたタイミングでコマンドを実行させる
問題
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
コメント