Capistranoで、:deploy_via => :remote_cacheのときに、git pushせずにdeployしてしまうのを防ぐ
https://gist.github.com/1111375
namespace :git do namespace :ensure do desc "Check if your local branch is synched with remote branch" task :pushed do local = `git rev-parse #{branch}`.chomp remote = `git rev-parse remotes/origin/#{branch}`.chomp unless local == remote abort "ABORTING:: You have local commits\n\t#{branch} => #{local}\n\tremotes/origin/#{branch} => #{remote}" end end end end before :deploy, "git:ensure:pushed"
git-rev-parseで、ブランチの最新のコミットを取得して、remoteとlocalを比較している。本当にこれで大丈夫かちょっと自信がないけど、
- cap deployする
- バグってた!!
- 直してcommitする
- cap deployし直す
- 完了まで待つ
- 直ってない
- push忘れてた!
という良くあるワークフローのミスについては改善されるはずである。
あ、コミット忘れるパターンもありそうだな。あんまり私はやった記憶がないけど。