Webhooksを使って自動でdeployするときに、ちょっと安全にgit pullしてくれるものを作った
TL;DR
- ローカルリポジトリに
HEAD
と差分がない - ローカルリポジトリのコミットがリモートリポジトリより進んでいない
時に、git pull
するシェルスクリプトを書いた。
また、使用するには以下の条件が必要です。
- .gitignore に追加するなどして、Gitプロジェクトに不要なファイルがないこと
- リモートリポジトリにパスフレーズなしでアクセスできること
- Webユーザとローカルリポジトリの所有者が同一であること
背景
本番環境の Gitプロジェクトを Gitを扱えない人が変更するような状態があって、 Webhooks を使って自動で deploy する時に、何かしらのファイルに更新があることを検出したい、もし変更があれば、反映しないようにしたいと思って作りました。
勉強になったこと
git rev-parse --abbrev-ref HEAD
でHEAD
のブランチ名を取得できる- https://git-scm.com/docs/git-rev-list を知った
- Shell の
-a
と&&
では挙動が違う。-a
は右辺・左辺とも実行され評価される。それに対して&&
ではまず左辺だけが実行され評価される - Shell の exitコードにも意味がある。http://tldp.org/LDP/abs/html/exitcodes.html