• 『现学现忘』Git基础 — 36、标签tag(一)


    1、标签介绍

    软件的某个发行版本所对应的,其实就是软件开发过程中,某一个阶段的最后一次git commit提交。我们知道每一个提交操作,对应的都会生成一个commit-id,而标签就是与某一个commit-id绑定的名称。一个标签一旦与某一个commit-id绑定,那么该标签就不能修改绑定到其它commit-id了,除非将该标签删除后才可以与其commit-id绑定。

    标签对象(tag object) 非常类似于一个提交对象,它包含一个标签创建者信息、一个日期、一段注释信息,以及一个指针。 主要的区别在于,标签对象通常指向一个提交对象,而不是一个树对象。 它像是一个永不移动的分支引用,永远指向同一个提交对象,只不过给这个提交对象加上一个更友好的名字罢了。

    像其他版本控制系统(VCS)一样,Git 可以给仓库历史中的某一个提交打上标签,以示重要。 比较有代表性的是,人们会使用这个功能来标记发布结点( v1.0v2.0 等等),我们也可以称标签tag为里程碑。

    2、列出标签

    在 Git 中列出已有的标签非常简单,只需要输入 git tag (可带上可选的 -l 选项 --list):

    bash
    $ git tag
    v1.0
    v2.0

    这个命令以字母顺序列出标签,但是它们显示的顺序并不重要。

    查看具体标签的详情,使用命令:git show 标名称

    你也可以按照特定的模式查找标签。 例如,Git 自身的源代码仓库包含标签的数量超过 500 个。 如果只对1.8.5 系列感兴趣,可以运行:

    bash
    $ git tag -l "v1.8.5*"
    v1.8.5
    v1.8.5-rc0
    v1.8.5-rc1
    v1.8.5-rc2
    v1.8.5.1
    v1.8.5.2
    v1.8.5.3

    提示:

    如果你只想查看完整的标签列表,运行 git tag 命令,会默认以列表的方式展现版本库中的标签。

    如果你提供了一个匹配标签名的通配模式,如上"v1.8.5*",那么 -l--list 选项就是强制要使用的。

    3、创建标签

    (1)标签的分类

    Git 支持两种标签:轻量标签(lightweight)与附注标签(annotated

    轻量标签:很像一个不会改变的分支,它只是某个特定提交的引用。

    附注标签:轻量标签只有标签名称,而使用附注标签,还可以为标签添加说明。

    • 是存储在 Git 数据库中的一个完整对象, 它们是可以被校验的,其中包含打标签者的名字、电子邮件地址、日期时间, 此外还有一个标签信息,并且可以使用GNU Privacy GuardGPG)签名并验证。
      提示:GPG是一种加密算法,现在Github支持提交使用GPG加密,从而保证提交的数据,在传输的过程中没有被篡改。
    • 通常会建议创建附注标签,这样你可以拥有以上所有信息。
    • 但是如果你只是想用一个临时的标签, 或者因为某些原因不想要保存这些信息,那么也可以用轻量标签。
    • 创建附注标签,就会产生Git中的第四种对象:tag对象。

    (2)附注标签

    在 Git 中创建附注标签十分简单。

    执行命令:git tag -a 标签名 -m '说明信息'

    提示:这是在最新一次提交打上,打标签。即若不指定标签绑定的commit-id,则默认为HEAD指针所指向的提交。

    -a选项意为"创建一个带注解的标签"。 (aannotated 的缩写)

    不用-a 选项也可以执行的,但该标签不会记录这标签是什么时候打的,谁打的,也不会让你给该标签添加注解。

    我推荐一直创建带注解的标签。

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

    -m 选项指定该标签的说明信息(必须)。

    如果你创建标签的时候,没有指定说明信息,Git 会启动编辑器要求你输入信息。

    通过使用 git show 命令,可以看到标签信息和与之对应的提交信息:

    bash
    $ git show v1.4
    tag v1.4
    Tagger: Ben Straub 	# 打标记的人
    Date:   Sat May 3 20:19:12 2014 -0700	# 打标机的实际
    
    my version 1.4	# 标记的说明信息
    
    # 以下是标记所对应的commit对象的信息
    commit ca82a6dff817ec66f44342007202690a93763949
    Author: Scott Chacon 
    Date:   Mon Mar 17 21:52:11 2008 -0700
    
        changed the version number

    输出显示了打标签者的信息、打标签的日期时间、标记说明信息,然后显示具体的提交信息。

    (3)轻量标签

    轻量标签本质上是将提交校验和存储到一个文件中,而没有保存任何其他信息。

    执行命令:git tag 标签名

    创建轻量标签,不需要使用 -a-s(创建GPG签名)-m 选项,只需要提供标签名字:

    bash
    $ git tag v1.4-lw
    $ git tag
    v1.3
    v1.4
    v1.4-lw

    这时,如果在标签上运行 git show 命令,你不会看到额外的标签信息。

    只会显示出对应的提交信息,如下:

    bash
    $ git show v1.4-lw
    commit ca82a6dff817ec66f44342007202690a93763949
    Author: Scott Chacon 
    Date:   Mon Mar 17 21:52:11 2008 -0700
    
        changed the version number

    4、后期打标签

    你也可以对过去的某个提交打标签。

    版本库提交历史如下:

    bash
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ git log --oneline --graph
    *   3110083 (HEAD -> master) 第7次提交,完成dev分支的新功能
    |\
    | * e94af28 第6次提交,修改dev和readme文件
    | * 9eb3224 第4次提交,dev分支开发 dev.txt文件
    * | 0690030 第5次提交,新增内容:branch test v4
    |/
    * b97ccfd 第3次提交,新增内容:branch test v3
    * f72a9fe 第2次提交,新增内容:branch test v2
    * fa2439a 第1次提交,新增readme.txt文件

    现在假设你在第3次提交的位置,忘记给项目打标签,你可以在后边的任何时间,在该位置补上标签。

    但是要注意,第3次提交的校验和,要加入到命令之中。

    执行命令:git tag -a 标签名 commit-id -m '说明信息'

    bash
    # 1.打标签
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ git tag -a v1.0 b97ccfd -m 'v1.0 里程碑'
    
    # 2.版本库提交历史
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ git log --oneline --graph
    *   3110083 (HEAD -> master) 第7次提交,完成dev分支的新功能
    |\
    | * e94af28 第6次提交,修改dev和readme文件
    | * 9eb3224 第4次提交,dev分支开发 dev.txt文件
    * | 0690030 第5次提交,新增内容:branch test v4
    |/
    * b97ccfd (tag: v1.0) 第3次提交,新增内容:branch test v3	# 看这行
    * f72a9fe 第2次提交,新增内容:branch test v2
    * fa2439a 第1次提交,新增readme.txt文件
    

    我们在版本库的历史提交信息中,可以看到你已经在第3次提交上打上了标签。

    我们再来查看一下,v1.0这个标签的信息。

    bash
    $ git show v1.0
    tag v1.0
    Tagger: sun_wk 
    Date:   Sun Apr 18 17:12:53 2021 +0800
    
    v1.0 里程碑
    
    commit b97ccfd5f3e98c12ab9c0fb4ca4b308e6805f7ed (tag: v1.0)
    Author: sun_wk 
    Date:   Fri Apr 16 22:07:47 2021 +0800
    
        第3次提交,新增内容:branch test v3
    

    提示:轻量标签执行命令:git tag 标签名 commit-id


    __EOF__

  • 本文作者: 繁华似锦的博客
  • 本文链接: https://www.cnblogs.com/liuyuelinfighting/p/16805518.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    Visual C++基础 - 使用OLE/COM操作Excel类
    与MQTT的初定情缘
    万能JAVA面试题
    微信小程序源码获取和反编译
    4.4.2.1 内部类
    NumPy矩阵对象介绍及方法
    UE4.27安装Spine教程
    【每日一题】481. 神奇字符串
    PAT 1065 A+B and C (64bit)
    技术管理进阶——跨级管理/汇报
  • 原文地址:https://www.cnblogs.com/liuyuelinfighting/p/16805518.html