0

我想添加一个钩子,记录一些内容,大意是“嘿,我要部署这样那样的提交”。就像是:

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

除了在这种情况下的“修订”似乎产生一个参考名称(即“主”)而不是一个提交 ID。我可以使用什么构造来获取 sha1?

4

1 回答 1

2

要获得 ref,您需要使用 Git:

这是我自己的一个项目中的一个示例,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

考虑到这一点,我建议使用以下方法来获取远程推送的参考散列(因为这是 Capistrano 3 唯一可以看到的,Capistrano 将在内部进行这样的检查,但您无法访问参考,并且如果这两个值不同,无论如何都会抱怨)

首先,在命令行上:

$ 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 领域非常容易地拆分它,而不需要cutor awk

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

这应该非常接近,并且非常便携(其中 ascutawk,并在外壳中用管道等拆分它是非常 *nix 特定的,不太可能在 Windows 上运行良好)

把它放在你的before任务中,你应该做好准备。

于 2013-10-18T18:19:22.603 回答