Git标签管理

我们可以针对某一次的提交打上一个标签,有点类似于给某次提交取个别名,比如1.0版本发布时打个标签叫v1.0,2.0版本发布时打个标签叫v2.0,因为每次版本提交的结果都是一连串的哈希码,不容易记忆,打上v1.0,v2.0这些具有某种含义的标签后,可以方便我们进行版本管理。

本文是Git系列的第七篇,了解前面的文章有助于更好的理解本文:


轻量级标签

轻量级标签就像是个不会变化的分支,实际上它就是个指向特定提交对象的引用。

首先我们可以通过如下命令来查看当前仓库中的所有标签:

$ git tag

打标签的方式很简单,直接通过git tag <tagname>来完成即可,如下命令:

$ git tag v1

表示创建了一个名为v1的tag,这个tag默认是创建在最新一次的commit上的,如下:

我们可以利用git show <tagname>来查看标签对应的版本信息,如下:

我们可以通过$ git tag -d <tagname>命令删除一个标签:

$ git tag -d v1

如下图:

如果我想给历史上的某次commit打一个标签呢?我们可以通过如下命令git tag <tagname> <commitversion>,如下:

$ git tag v0.0 7d519

表示给commit的哈希码为7d519的那一次commit打上一个标签,如下图:

含附注的标签

而含附注标签,实际上是存储在仓库中的一个独立对象,它有自身的校验和信息,包含着标签的名字,电子邮件地址和日期,以及标签说明,标签本身也允许使用 GNU Privacy Guard (GPG) 来签署或验证。

打一个含附注的标签很简单,使用git tag -a <tagname> -m <msg>命令,如下:

$ git tag -a v0.0 -m "文件初次建立" 7d519

如下:

如果不加最后的版本号参数,表示给最新的一次commit打标签。

签署标签

说到签署标签我们得先介绍一下GPG:

GPG是加密软件,可以使用GPG生成的公钥在网上安全的传播你的文件、代码。为什么说安全的?以Google所开发的repo为例,repo即采用GPG验证的方式,每个里程碑tag都带有GPG加密验证,假如在里程碑v1.12.3处你想要做修改,修改完后将这个tag删除,然后又创建同名tag指向你的修改点,这必然是可以的。但是,在你再次clone你修改后的项目时,你会发现,你对此里程碑tag的改变不被认可,验证失败,导致你的修改在这里无法正常实现。这就是GPG验证的作用,这样就能够保证项目作者(私钥持有者)所制定的里程碑别人将无法修改。那么,就可以说,作者的代码是安全传播的。为什么会有这种需求?一个项目从开发到发布,再到后期的更新迭代,一定会存在若干的稳定版本与开发版本(存在不稳定因素)。作为项目发起者、持有者,有权定义他(们)所认可的稳定版本,这个稳定版本,将不允许其他开发者进行改动。还以Google的repo项目为例,项目所有者定义项目开发过程中的点A为稳定版v1.12.3,那么用户在下载v1.12.3版本后,使用的肯定是A点所生成的项目、产品,就算其他开发者能够在本地对v1.12.3进行重新指定,指定到他们修改后的B点,但是最终修改后的版本给用户用的时候,会出现GPG签名验证不通过的问题,也就是说这样的修改是不生效的。

——摘自<[带GPG签名的Git tag]>一文

使用签署标签我们先要生成GPG Key,生成命令如下:

$ gpg --gen-key

能默认的就直接按回车默认,不能默认的就根据提示输入相应的值,这里的都很简单,不再赘述。完了之后,就可以通过如下命令来打标签了:

$ git tag -s v0.0 -u "laowang" -m "文件初次建立" 7d519

就把上面的-a换成-s,然后添加-u参数,-u参数的值是我们在生成GPG Key的时候配置的name属性的值,注意-u参数不可以写错,否则标签会创建失败,如下:

如上图,-u参数写错时,标签创建失败。

标签推送到远程仓库

git push命令并不会把tag提交到远程仓库中去,需要我们手动提交,如下:

$ git push origin v0.0

表示将v0.0标签提交到远程仓库,也可以通过$ git push origin --tags提交所有的tag到远程仓库,如下:

此时别人调用git pull更新代码之后,就能看到我们的tag。如下:

Ok,Git标签管理我们先说这么多。有问题欢迎留言讨论。

参考资料:

1.《GitHub入门与实践》 2.《Pro Git》

本文分享自微信公众号 - 玩转JavaEE(gh_d1ca11234a30),作者:悟空

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-11-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring Cloud自定义Hystrix请求命令

    在上篇文章中,我们介绍了断路器Hystrix的一个简单使用,主要是通过注解来实现断路器的功能的,不过对于Hystrix的使用,除了注解,我们也可以使用继承类的方...

    江南一点雨
  • Spring Cloud中Hystrix的请求合并

    在微服务架构中,我们将一个项目拆分成很多个独立的模块,这些独立的模块通过远程调用来互相配合工作,但是,在高并发情况下,通信次数的增加会导致总的通信时间增加,同时...

    江南一点雨
  • Spring Cloud系列勘误

    Spring Cloud系列已经写完了,这是一系列的学习笔记,由于写作匆忙,难免会有出错的文字或者代码,实在抱歉。 目前作者已经发现了几处有错误的地方,为了小伙...

    江南一点雨
  • 使用git tag打标签

    轻量级标签就像是个不会变化的分支,实际上它就是个指向特定提交对象的引用。而含附注标签,实际上是存储在仓库中的一个独立对象,它有自身的校验和信息,包含着标签的名字...

    羽翰尘
  • MyBatis中动态sql语句标签详解

    时间静止不是简史
  • Git标签

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    奋飛
  • 【python入门系列课程 汇集】

    本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地...

    用户7054460
  • 访谈 | 与吉林大学统计系教授聊聊时间序列分析

    本文由经管之家CDA数据分析师独家整理,转载请注明来源 前不久,经管之家邀请到了吉林大学数据学院概率统计系教授朱复康博士参与了论坛的线上互动问答,与广大坛友就时...

    CDA数据分析师
  • Git基础知识(四)

    经常可以看到一些软件的版本是V1.0,V2.0这样的,Git也支持给历史的某个提交打上这样一个东西,也就是标签。

    zx钟
  • django assignment_tag 赋值标签

    django.template.Library.assignment_tag()¶

    KEVINGUO_CN

扫码关注云+社区

领取腾讯云代金券