我知道有一个我可以使用的http部署钩子,但不幸的是它没有提交分支名称,这是它提交的内容:
{"head"=>"7021419", "app"=>"appname", "git_log"=>"commit message", "action"=>"home", "url"=>"site url", "prev_head"=>"1d844b0", "controller"=>"account_sessions", "user"=>"heroku@user.com", "head_long"=>"7031429230228988d8f3312fa9e74d77b6c1bc14"}
我尝试使用 head 或 head_long 来确定分支名称:
git branch --contains SHA
哪个有效,但它不是100%准确,因为相同的SHA可能在多个分支中。同样可以说:
git reflog show --all | grep 7021419
我很确定从部署的应用程序中获取当前分支名称是不可能的,因为部署到Heroku的分支始终是“主”分支。我希望我可以将部署回调挂钩发送到另一台服务器并将部署记录存储在某处。
答案 0 :(得分:1)
如果它只是头部,请使用
git rev-list --no-walk --glob=refs/heads
在
上添加了--format
和grep
逻辑
最简单的方法是使用标签。
像普通分支一样推送标签:
<击>
git push herokuremote tagname:publicbranchname
不幸的是,这只会推动标签,而不是分支......;继续阅读
(注意我不知道/使用heroku,所以我不知道命名约定,抱歉)
如果您不介意使用一些管道,您可以将本地引用命名为已部署的引用。您可以为此目的使用符号引用:
git update-ref -m "deployed release candidate" --no-deref refs/heads/deployed master
答案 1 :(得分:0)
如果相同的SHA在多个分支中,则它们实际上是相同的分支(至少在那个时间点)。如果你确定SHA是分支的最后一次提交,你可以在.git / refs / heads / *中找到它,其中*是一个文件列表,其名称对应于分支名称,内容是SHA。
您似乎可以通过不使用其API来解决此录制问题。包装部署脚本(或Heroku的部署二进制文件或推后挂钩)应该为您提供通知其他服务以保持记录所需的灵活性。