checkoutしたタイミングで任意の処理を実行する
前置き
仕事場では、gruntが導入されており、その生成物はバージョン管理の対象外となっています。
そのため、他の人がjsを修正した際に、ブランチを切り替えたあと、"grunt build"を実行しないと、古いjsのまま動かしてしまうことが何度かありました。*1
基本的に、自分ではjsを触らないこともあり、チェックアウトしたタイミングで、自動的に再生成されるようにしました。
手順
まず、チェックアウトされたタイミングで実行したい処理を記述します。
今回は kyouen-python にあるcoffeescriptを自動的にjsに変換する処理を書いてみます。
フォルダ構成としては、
kyouen-python/src/coffee:coffeescriptが保存してある
kyouen-python/src/js:生成されたjsを保存する
といった感じです。
なので、スクリプトは下記のようになります。
cd src/coffee coffee -c -o ../js list.coffee
これを、"post-checkout"として保存します。(カレントディレクトリは"kyouen-python"の想定)
cd .git/hooks/ echo "cd src/coffee" >> post-checkout echo "coffee -c -o ../js list.coffee" >> post-checkout chmod +x post-checkout
あとは、通常通りチェックアウトすると、自動的にlist.jsが生成されます。*2
git checkout feature-XXXX
雑感
"post-checkout"だけでなく、いろいろなフックがあるようです。
"pre-"とついたフックを書くことで、commitなどの行動に制約を課すことができるようです。(lintを実行し、エラーだったら拒否するとか)
チームで作業する際に、てきとーなコミットを許さない、とか出来そうですね。*3
.gitディレクトリ以下って、バージョン管理対象外ですよね?
この"post-checkout"ファイルはどうやって管理するのが普通なんだろう。。。