我想添加一个钩子来记录“嘿,我即将部署这样的提交”的效果。类似的东西:
before "deploy:update_code" do
logger.info "Deploying #{revision}"
end
在此上下文中除“revision”之外似乎产生引用名称(即“master”)而不是提交ID。我可以使用什么构造来获取sha1?
答案 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版本中轻松拆分它,而不需要cut
或awk
:
$ irb --simple-prompt
>> `git show-ref #{fetch(:branch)}`.split.first
这应该非常接近,并且非常便携(在cut
和awk
的位置,并且在管道等中将它拆分为具有特定的* nix特定且不太可能正常工作Windows)
将其删除到before
任务中,然后设置即可。