Git标签管理

时间:2022-05-06
本文章向大家介绍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》