gitでブランチを切り替えた時に何かする(例えばrbenvでRubyのバージョンを切り替えたり)
タイトルの通りのことをやりたかったっぽいので。
例えば、現在のRubyのバージョンはREE 1.8.7だけど、次回リリースからは1.9.3にあげることになっている場合なんか、masterブランチはREE使うけどdevelopブランチは1.9.3で動作させる必要があるっぽいけど、checkoutするたびにrbenv localとかするのダルいしよく忘れるので全力回避したいっぽいです。
で、どうやるかというと、gitのhookでpost-checkoutというのがあり、そこに色々書くとふんわりとやってくれる風味っぽい。
gitリポジトリの.git/hooks/post-checkout をこんな風に書いておくとよいっぽい。
#!/bin/sh # Change ruby version CURRENT_BRANCH=`git rev-parse --abbrev-ref HEAD` RUBY_VERSION=`git config branch.${CURRENT_BRANCH}.ruby.version` if [ $? -ne 0 ]; then RUBY_VERSION=`git config --global ruby.version` fi BUNDLE_GEMFILE=`git config branch.${CURRENT_BRANCH}.ruby.gemfile` if [ $? -ne 0 ]; then BUNDLE_GEMFILE=`git config --global ruby.gemfile` fi if [ -n "${RUBY_VERSION}" ]; then echo " change local ruby version to ${RUBY_VERSION}" rbenv local ${RUBY_VERSION} fi if [ -n "${BUNDLE_GEMFILE}" ]; then echo " set gemfile to ${BUNDLE_GEMFILE}" export BUNDLE_GEMFILE=${BUNDLE_GEMFILE} fi
使用するRubyのバージョンは、こんな風にglobalな設定と、ブランチ毎の設定をそれぞれやっておく
# globalな設定(systemのrubyを使うっぽい) git config --gobal ruby.version system # developの設定 git config --gobal branch.my_cool_branch.ruby.version 1.9.3-p448 git config --gobal branch.my_cool_branch.ruby.gemfile ~/dev/awesome_rails_app/Gemfile.1.9.3 # my_cool_branchの設定 git config --gobal branch.my_cool_branch.ruby.version 2.0.0-p195 git config --gobal branch.my_cool_branch.ruby.gemfile ~/dev/awesome_rails_app/Gemfile.2.0.0
これで、git checkoutした時にpost-checkoutが走って、設定されたバージョンにrbenvで切り替えるっぽい
$ git checkout develop Switched to branch 'develop' change local ruby version to 1.9.3-p448 set gemfile to ~/dev/awesome_rails_app/Gemfile.1.9.3 $ ruby -v ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-linux]
Rubyのバージョン切替以外に、ブランチ毎になんかしたかったらpost-checkoutに書くとよいっぽい。