git pullでファイルに変更があったら特定のコマンドを実行する。
最近ガッツリnode.jsのプロジェクトを行っているんですが、チームで開発しててよくあるのが、git pull
した後にpackage.json
やbower.json
が変更されている事に気づかず、 そのまま起動してしまい、モジュールが足りてなくて動作しないって事です。
多分コレってnode.jsに限らずrubyとかperlとかphpとかpythonとか何でもあると思うんです。もうすぐ、2014年度です、運用でpullしてエラーが出たらnpm install/cpanm/bundle install
しましょうとか言うのは辞めましょう。*1
git pullしたら変更されたファイルの一覧から 対象のファイルが変更されているかどうかを認識して、特定のコマンドを自動で実行するためのコマンド、hookinを作りました。
Getting started
npmが入っているなら超簡単で、
$ npm install hookin -g
で入れて
$ cd <project_root> $ hookin <チェック対象ファイル> <実行コマンド>
ってやれば
にチェック対象のファイルとそのファイルが更新された時に実行されるコマンドが記述されます。
例:
$ hookin package.json "npm install && npm prune" $ hookin bower.json "bower install && bower prune"
作ったらpackage.jsonにgithub上で変更を入れてみましょう。package.jsonに変更があったら勝手にnpm install && npm prune が実行されます。(.gitフォルダが有ることが前提なので、git initかgit cloneでgit プロジェクトである必要があります。)
CREDITS
hookin
を実行すると、.git/hook/post-merge
以下に下記のようなファイルを作ります。
#/usr/bin/env bash #MIT © Sindre Sorhus - sindresorhus.com # forked by Yosuke Furukawa #changed_files checker changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)" check_run() { echo "$changed_files" | grep --quiet "$1" && eval "$2" } # package.json check_run package.json "npm install && npm prune" # bower.json check_run bower.json "bower install && bower prune"
MITライセンスで明記されているように、これの元ネタはsindresorhusがgistに投稿してた以下のスクリプトから派生したものです。