我想在浏览器中显示当前git commit的哈希,以便测试团队(无权运行heruko命令)将能够在bug报告中包括相应的commit哈希。
首先,我尝试使用沙砾,但是有些东西坏了,并且在Heroku上不起作用(在本地,效果很好,我不知道为什么在Heroku上失败)。
因此我发现Heroku上有两个环境变量:
ENV["COMMIT_HASH"]
ENV["LAST_COMMIT_BY"]
但是它们都不可用(均为零)。
我还检查了:
heroku config
但是同样,两者都没有设置。
有没有办法检索哈希信息?有什么办法可以获取更多git信息,例如date?
最佳答案
首先,由于在子弹编译期间使用了heroku "remove[s] unused files, including the .git directory",您将无法从应用程序目录(在heroku dyno上)执行一些git命令。这包括git rev-parse HEAD
之类的东西,通常这是获取当前哈希的一种简便方法。
其次,尝试在heroku dyno上使用git ls-remote
检索信息将调用ssh,并且您将看到显示The authenticity of host 'heroku.com (50.19.85.132)' can't be established
的消息,因为heroku dynos上未安装heroku公钥。您无权安装heroku公钥。
您仍然至少有两个选择。
a)创建或编辑文件
.git/hooks/post-commit
b)添加一些shell脚本代码,如下所示:(您可以将所需的任何代码用于git hook;这只是一种选择)
说明:
HEAD_HASH
是heroku环境变量的名称。随便叫什么。您将在主应用程序中查找并显示在页面上。 git rev-parse HEAD
获取当前HEAD提交的哈希值。根据您要显示的内容自定义此行。 现在,当您提交git时,
HEAD_HASH
env var将每次更新。这可行,但是可能有点慢,因为您每次提交时都会等待heroku设置env var。如果您的网络连接断开等,则该变量将不会更新。 Rumour is git 1.8.2将允许“pre-push”挂钩,您可以在其中放置此代码。 您不必编写
git push heroku master
来推送代码,而可以编写一个shell脚本,其中包含来自1.
选项的行,并在末尾添加git push heroku master
。然后,要部署代码,请运行此Shell脚本。这只会在推送之前(而不是在每次git commit之后)更新HEAD_HASH
,并将所有内容都保存在一个位置。您可能也想将脚本添加到.slugignore
文件中。