deploy.rbの中で:branchにブランチを書くと指定できるが指定してない場合
なにが起きてるのか知りたくてすこし中身みた
環境
- Capistrano 2.9.0
本題
まず、branchオプションが設定されているかどうかをみてなかったら代わりにHEADにする
# capistrano-2.9.0/lib/capistrano/recipes/deploy/scm/git.rb 114 class Git < Base 115 # Sets the default command name for this SCM on your *local* machine. 116 # Users may override this by setting the :scm_command variable. 117 default_command "git" 118 119 # When referencing "head", use the branch we want to deploy or, by 120 # default, Git's reference of HEAD (the latest changeset in the default 121 # branch, usually called "master"). 122 def head 123 variable(:branch) || 'HEAD' 124 end
これはどこで呼ばれてるかというと下記で呼ばれており以後revisionとして扱われる
# capistrano-2.9.0/lib/capistrano/recipes/deploy.rb 29 _cset(:revision) { source.head }
gitの方に戻りgit-ls-remote(226行目)で該当リビジョンのハッシュ値をとってきている模様
# capistrano-2.9.0/lib/capistrano/recipes/deploy/scm/git.rb 221 # Getting the actual commit id, in case we were passed a tag 222 # or partial sha or something - it will return the sha if you pass a sha, too 223 def query_revision(revision) 224 raise ArgumentError, "Deploying remote branches is no longer supported. Specify the remote branch as a local branch for the git repository you're deploying from (ie: '#{revision.gsub ('origin/', '')}' rather than '#{revision}')." if revision =~ /^origin\// 225 return revision if revision =~ /^[0-9a-f]{40}$/ 226 command = scm('ls-remote', repository, revision)
git-ls-remoteでHEADを見るとorigin/HEADが参照されるはずでorigin/HEADはデフォルトだとorigin/masterのHEADを指しているから
origin/masterのHEADがデプロイされるということなんだと思う