提交要部署的修订版的哈希值?

时间:2013-10-18 17:38:36

标签: capistrano

我想添加一个钩子来记录“嘿,我即将部署这样的提交”的效果。类似的东西:

before "deploy:update_code" do
  logger.info "Deploying #{revision}"
end

在此上下文中除“revision”之外似乎产生引用名称(即“master”)而不是提交ID。我可以使用什么构造来获取sha1?

1 个答案:

答案 0 :(得分:1)

要获得引用,你需要向Git发送shell:

以下是我自己的一个项目的示例,其中master完全是最新的并且已推送,而我的clean_architecture分支则不是。

~/api git:(clean_architecture) $ git show-ref master
349dabbffec0713ac0fc70cf991dbaff6412ad2b refs/heads/master
349dabbffec0713ac0fc70cf991dbaff6412ad2b refs/remotes/origin/master
~/api git:(clean_architecture) $ git show-ref clean_architecture
14afae560ace128a13336ca01ff2391b678fadaf refs/heads/clean_architecture
bc78906ad0b2814dbc6225b2e14155b66eedffd0 refs/remotes/origin/clean_architecture

考虑到这一点,我建议使用以下内容来获取远程推送的ref hash(因为这是Capistrano 3唯一可以看到的,Capistrano会在内部进行检查,但你不能访问ref,并且如果这两个值不同则会抱怨,无论如何)

首先,在命令行上:

$ git show-ref clean_architecture | tail -1 | cut -f1 -d ' '
bc78906ad0b2814dbc6225b2e14155b66eedffd0
$ git show-ref clean_architecture | tail -1 | awk '{print $1}'
bc78906ad0b2814dbc6225b2e14155b66eedffd0

(在linux上有大约一百万种方法)

其次在Ruby中:

$ irb --simple-prompt
>> `git show-ref #{fetch(:branch)}`
=> "349dabbffec0713ac0fc70cf991dbaff6412ad2b refs/heads/master\n349dabbffec0713ac0fc70cf991dbaff6412ad2b refs/remotes/origin/master\n"

让我们知道我们可以在Ruby版本中轻松拆分它,而不需要cutawk

$ irb --simple-prompt
>> `git show-ref #{fetch(:branch)}`.split.first

这应该非常接近,并且非常便携(在cutawk的位置,并且在管道等中将它拆分为具有特定的* nix特定且不太可能正常工作Windows)

将其删除到before任务中,然后设置即可。