【问题标题】:How to record a history of releases for a web project in Git?如何在 Git 中记录 Web 项目的发布历史?
【发布时间】:2013-07-13 07:52:09
【问题描述】:

我正在开发一个经常合并和发布到生产环境的 Web 项目。我希望存储库包含曾经推送到生产服务器上的所有内容的完整记录,主要是这样我就可以分析三周前的错误日志条目,准确了解当时生产中的代码。

我不能为此使用 release 分支,因为在 Git 中,没有在特定分支上提交的历史的概念。我们目前确实使用release 分支,但它无法让我回答“三周前生产中的代码是什么”的问题。

那么,我应该如何在 Git 中做到这一点?

【问题讨论】:

  • 为什么不将提交标记为“已发布 $timestamp”?这非常适合自动部署。
  • @mbx 当然,我不知道。我在这里问:) 在我以前使用过的所有其他 SCM 中,我会使用一个分支,但我不能在 Git 中,因此问题。
  • 不会在每次发布时都设置一个标签以满足您的要求吗?

标签: git release


【解决方案1】:

标签旨在用于 git 上的这种用途。您可以阅读标签here

根据您的问题,您可以获得所有标签的列表,从而了解已发布的内容。 git scm-book 上的示例是:

$ git tag -l 'v1.4.2.*'
v1.4.2.1
v1.4.2.2
v1.4.2.3
v1.4.2.4

签出特定标签将使您处于与发布代码时完全相同的状态。

您甚至可以对标签进行 GPG 签名,这对共享存储库很有帮助,如果您担心有人会混淆(无论是有意还是无意)。

请注意:

默认情况下,git push 命令不会将标签传输到远程 服务器。您必须将标签显式推送到共享服务器 创建它们之后。这个过程就像共享远程 分支——你可以运行 git push origin [tagname]。

因为如果你认为它会导致可怕的头痛。

在 git 中,您真正需要的只是提交的 sha,因此根据您的需要,将其写下来就足够了。

【讨论】:

  • Git 可以使用git log 轻松列出所有带有“已发布”标签的修订吗?更好的是,我可以git checkout <release live on 2013-07-15> 吗?我只是问,因为我已经习惯了在我使用过的其他 SCM 中这很容易。
  • 是的,您可以对标签进行操作,就像它们在几乎所有情况下都是提交哈希一样。
  • @voyager 这种方法是否使release 分支完全多余?我认为我们拥有它的唯一原因是回答这个问题,但是如果我要标记发布,那么也没有必要再有一个分支(除非我使用您在回答中描述的策略)。
  • @voyager 我只是在编辑指出这一点的答案!谢谢,我觉得值得一说
  • @romkyns,是的,我会选择其中一个。就个人而言,我偏爱有一个分支,但标签正是为此而制作的。如果您经常(超过每天)滚动发布,那么使用标签将是一件头疼的事,因为您必须考虑如何命名它们,而使用发布时您将使用哈希。拥有一个单独的分支可能也更容易将内容挑选到 prod 中。如果您定期发布里程碑版本,请使用标签。
【解决方案2】:

如果每个推送到生产的代码都是合并到发布分支,您将拥有名为 Merge branch 'master' into release 的提交,并带有合并发生时刻的时间戳。在 git 的日志中,默认情况下您只会看到当前分支的提交,因此您可以通过使用合并的时间戳来确定当时推送的 release 分支中的最新提交是什么,从而查看生产中的内容。

【讨论】:

    【解决方案3】:

    当您为生产构建版本时,您可以创建一个代表此特定构建的标记,也可以简单地保存该特定提交的当前 SHA1 哈希。

    通过一些额外的构建逻辑,您可以使用此哈希号标记您的版本,以唯一标识您的版本。 可以在here 找到一些如何在 ANT-Builds 中执行此操作的示例。

    【讨论】:

      猜你喜欢
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 2017-06-16
      • 2017-12-09
      相关资源
      最近更新 更多