我想在浏览器中显示当前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公钥。

您仍然至少有两个选择。

  • 添加post-commit hook以更新哈希值。

    a)创建或编辑文件.git/hooks/post-commitb)添加一些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文件中。
  • 07-24 13:32