Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

Capistrano2.x系でのsubmodule updateで最新版を取得する方法

CapistarnoでCakePHPアプリをデプロイしているのですが、Cake自体のライブラリはサブモジュール化して取得する構成にしています。

その際に困ったことが1つありまして・・・

git submodule updateしてもgit submodule initした時点のコミットにしか追従してくれません。

git submodule addしてるリポジトリ(例えば.vim/vundleとか)をgithubなどのリモートの最新に追従するにはgit submodule foreach git pull origin masterを実行します。

git submoduleしてるリポジトリをリモートの最新に更新する - Qiita

initした時の状態しか持ってこないから、最新版のHEADを取得するにはpullしろってことらしい。まぁ、わからなくもないが・・・updateでpullってくればいいじゃんって思うのは僕だけかなw

で、Capistarano2.xだとgit_enable_submodulesというパラメーターはあるけど、updateするだけでpullしてはくれないので、ちょっとだけコマンドを書きなおす必要があった。

#capistrano-2.15.5/lib/capistrano/recipes/deploy/scm/git.rb
#152行目ぐらい

 if variable(:git_enable_submodules)
    execute << "#{git} submodule #{verbose} init"
    execute << "#{git} submodule #{verbose} sync"
    #この行を追加する
  execute << "#{git} submodule foreach git pull origin master"

いじょ。