Close

Git tag

本文档将讨论 Git 的标记概念和 git tag 命令。标记是指向 Git 历史记录中特定点的引用。标记通常用于捕获用于标记版本发布的历史点(即v1.0.1)。标记就像一个不变的分支。与分支不同,标记在创建后没有进一步的提交历史记录。有关分支的更多信息,请访问 git branch 页面。本文档将介绍不同类型的标记、如何创建标记、列出所有标记、删除标记、共享标记等。


创建标记


要创建新标记,请执行以下命令:

git tag <tagname>

使用语义标识符替换 < tagname >,使其成为创建标记时代码存储库的状态。常见的模式是使用像 git tag v1.4 这样的版本号。Git 支持两种不同类型的标记:带注释的标记和轻量级标记。前面的示例创建了一个轻量级标记。轻量级标记和带注释的标记在存储的随附元数据量上有所不同。最佳实践是将带注释的标记视为公开标记,将轻量级标记视为私有标记。带注释的标记存储额外的元数据,例如:标记者姓名、电子邮件和日期。这是公开版本的重要数据。轻量级标记本质上是提交的“书签”,它们只是一个名称和指向提交的指针,可用于创建指向相关提交的快速链接。

Annotated tags


带注释的标记作为完整对象存储在 Git 数据库中。重申一下,它们存储了额外的元数据,例如:标记者姓名、电子邮件和日期。与提交和提交消息类似,带注释的标记有标记消息。此外,出于安全考虑,可以使用 GNU Privacy Guard (GPG) 对带注释的标记进行签名和验证。git 标记的建议最佳实践是优先使用带注释的标记而不是轻量级标记,这样您就可以拥有所有相关的元数据。

git tag -a v1.4

执行此命令将创建一个以 v1.4 标识的新的带注释的标记。然后,该命令将打开配置的默认文本编辑器,提示输入进一步的元数据。

git tag -a v1.4 -m "my version 1.4"

执行此命令与之前的调用类似,但是,此版本的命令会传递一个 -m 选项和一条消息。这是一种类似于 git commit -m 的便捷方法,它将立即创建一个新标记并放弃打开本地文本编辑器,转而使用 -m 选项保存传入的消息。

Git 徽标
相关资料

Git 速查表

Bitbucket 徽标
查看解决方案

了解 Bitbucket Cloud 的 Git

Lightweight tags


git tag v1.4-lw

执行此命令会创建一个标识为 v1.4-lw 的轻量级标记。轻量级标记是在没有 -a-s-m 选项的情况下创建的。轻量级标记会创建一个新的标记校验和并将其存储在 .git/ 项目代码存储库目录。

Listing tags


要列出代码存储库中存储的标签,请执行以下命令:

git tag

这将输出标记列表:

v0.10.0
    v0.10.0-rc1
    v0.11.0
    v0.11.0-rc1
    v0.11.1
    v0.11.2
    v0.12.0
    v0.12.0-rc1
    v0.12.1
    v0.12.2
    v0.13.0
    v0.13.0-rc1
    v0.13.0-rc2

要细化标记列表,可以使用通配符表达式传递 -l 选项:

$ git tag -l *-rc*
    v0.10.0-rc1
    v0.11.0-rc1
    v0.12.0-rc1
    v0.13.0-rc1
    v0.13.0-rc2
    v0.14.0-rc1
    v0.9.0-rc1
    v15.0.0-rc.1
    v15.0.0-rc.2
    v15.4.0-rc.3

前面的示例使用了 -l 选项和 -rc 的通配符表达式,它返回标有 -rc 前缀的所有标记的列表,该前缀之前用于标识候选版本

Tagging old commits


前面的标记示例演示了对隐式提交的操作。默认 git tag 会在 HEAD 引用的提交上创建一个标记。或者 git tag 可以作为对特定提交引用传递。这将标记传递的提交,而不是默认为 HEAD。要收集旧提交的列表,请执行 git log 命令。

$ git log --pretty=oneline
    15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'feature'
    a6b4c97498bd301d84096da251c98a07c7723e65 add update method for thing
    0d52aaab4479697da7686c15f77a3d64d9165190 one more thing
    6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'

执行 git log 将输出提交列表。在这个例子中,我们将为新标记选择提交量最高的 Merge branch 'feature'。我们需要引用提交的 SHA 哈希才能传递给 Git:

git tag -a v1.2 15027957951b64cf874c3557a0f3547bd83b3ff6

执行上述 git tag 调用将为我们在上一个 git log 示例中选择的提交创建一个标识为 v1.2 的新的带注释的提交。

ReTagging/Replacing old tags


如果您尝试使用与现有标记相同的标识符创建标记,Git 会抛出一个错误,如下所示:

fatal: tag 'v0.4' already exists

此外,如果您尝试使用现有的标记标识符标记较旧的提交,Git 会抛出同样的错误。

如果您必须更新现有标记,则必须使用 -f FORCE 选项。

git tag -a -f v1.4 15027957951b64cf874c3557a0f3547bd83b3ff6

执行上述命令会将 15027957951b64cf874c357a0f357bd83ff6 提交映射到 v1.4 标记标识符。它将覆盖 v1.4 标记的所有现有内容。

Sharing: Pushing tags to remote


共享标记类似于推送分支。默认 git push 不会推送标记。标记必须明确传递给 git push

$ git push origin v1.4
    Counting objects: 14, done.
    Delta compression using up to 8 threads.
    Compressing objects: 100% (12/12), done.
    Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done.
    Total 14 (delta 3), reused 0 (delta 0)
    To git@bitbucket.com:atlasbro/gittagdocs.git
     * [new tag]         v1.4 -> v1.4

要同时推送多个标记,请将 --tags 选项传递给 git push 命令。当其他用户克隆或提取代码存储库时,他们将收到新的标记。

Checking out tags


You can view the state of a repo at a tag by using the git checkout command.

git checkout v1.4

上面的命令将签出 v1.4 标记。这会使代码存储库处于游离的 HEAD 状态。这意味着所做的任何变更都不会更新标记。他们将创建一个新的游离的提交。这个新的游离的提交不会成为任何分支的一部分,只能通过提交 SHA 哈希直接访问。因此,在游离的 HEAD 状态下进行变更时,最好创建一个新分支。

Deleting tags


删除标记是一项简单的操作。将 -d 选项和标记标识符传递给 git tag 会删除已识别的标记。

$ git tag
    v1
    v2
    v3
    $ git tag -d v1
    $ git tag
    v2
    v3

在此示例中,执行 git tag 以展示显示 v1、v2、v3 的标记列表,然后执行 git tag-d v1,删除 v1 标记。

摘要


To recap, Tagging is an additional mechanism used to create a snap shot of a Git repo. Tagging is traditionally used to create semantic version number identifier tags that correspond to software release cycles. The git tag command is the primary driver of tag: creation, modification and deletion. There are two types of tags; annotated and lightweight. Annotated tags are generally the better practices as they store additional valuable meta data about the tag. Additional Git commands covered in this document were git push, and git checkout. Visit their corresponding pages for discussion on their extended use.


分享此文章
下一主题

推荐阅读

将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。

人们通过满是工具的墙进行协作

Bitbucket 博客

Devops 示意图

DevOps 学习路径

与 Atlassian 专家一起进行 Den 功能演示

Bitbucket Cloud 与 Atlassian Open DevOps 如何协同工作

注册以获取我们的 DevOps 新闻资讯

Thank you for signing up