我正在开发一个经常合并和发布到生产中的网络项目。我希望存储库包含曾经推送到生产服务器上的所有内容的完整记录,主要是这样我就可以分析三周前的错误日志条目,从而准确了解当时生产中的代码。
我不能release
为此使用分支,因为在 Git 中,没有特定分支上的提交历史的概念。我们release
目前确实使用了一个分支,但它无法让我回答“三周前生产中的代码是什么”的问题。
那么,我应该如何在 Git 中做到这一点?
标签旨在用于 git 上的这种用途。您可以在此处阅读有关标签的信息。
根据您的问题,您可以拥有所有标签的列表,从而了解已发布的内容。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,所以写下来就足够了,这取决于你的需要。
当您构建用于生产的版本时,您可以创建一个代表此特定构建的标签,也可以简单地保存该特定提交的当前 SHA1 哈希。
通过一些额外的构建逻辑,您可以使用此哈希号标记您的版本,它唯一地标识您的版本。可以在此处找到一些如何在 ANT-Builds 中执行此操作的示例。
如果每个推送到生产的代码都是合并到发布分支,您将拥有名为 的提交Merge branch 'master' into release
,并带有合并发生时刻的时间戳。在 git 的日志中,默认情况下您只看到当前分支的提交,因此您可以通过使用合并的时间戳来确定release
当时推送的分支中的最新提交是什么,从而查看生产中的内容。