我正在研究一个频繁合并并发布到生产中的Web项目。我希望存储库包含所有被推送到生产服务器上的所有内容的完整记录,主要是因为我可以分析三周前的错误日志条目,确切知道当时生产的代码是什么。
我不能使用release
分支,因为在Git中,没有关于特定分支的提交历史的概念。我们目前使用release
分支,但它无法回答“三周前生产的代码是什么”的问题。
那么,我应该如何在Git中做到这一点?
答案 0 :(得分:2)
标签适用于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
签出特定标签会使您处于与发布代码时完全相同的条件。
你甚至可以在标签上签名,这可能会对共享存储库有所帮助,如果你担心任何人混淆了事情(无论是故意的还是偶然的)。
请注意:
默认情况下,git push命令不会将标记传输到远程 服务器。您必须明确地将标记推送到共享服务器 在你创建它们之后。这个过程就像共享远程一样 分支 - 你可以运行git push origin [tagname]。
因为如果你认为这样做会导致严重的头痛。
就像在git中一样,你真正需要的只是提交的sha,所以根据你的需要写下来就足够了。
答案 1 :(得分:1)
如果每个代码推送到生产是合并到发布分支,那么您将拥有名为Merge branch 'master' into release
的提交,其中包含合并发生时的时间戳。在git的日志中,默认情况下您只看到当前分支的提交,因此您可以通过使用合并的时间戳来确定生产中的内容,以确定{{{}中的最新提交是什么。 1}}当时被推的分支。
答案 2 :(得分:1)
为生产构建版本时,您可以创建代表此特定构建的标记,也可以只保存该特定提交的当前SHA1哈希值。
使用一些额外的构建逻辑,您可以使用此哈希编号对您的版本进行标记,以便唯一标识您的版本。 可以在here找到一些如何在ANT-Build中执行此操作的示例。