Git

Git 标签管理

Posted by 彭楷淳 on 2021-02-01
Estimated Reading Time 4 Minutes
Words 1.2k In Total
Viewed Times

轻量级标签


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

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

1
$ git tag

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

1
$ git tag v1

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

img

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

img

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

1
$ git tag -d v1

如下图:

img

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

1
$ git tag v0.0 7d519

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

img

含附注的标签


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

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

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

如下:

img

如果不加最后的版本号参数,表示给最新的一次 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 Key,生成命令如下:

1
$ gpg --gen-key

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

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

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

img

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

标签推送到远程仓库


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

1
$ git push origin v0.0

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

img

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

img

更多干货请移步:https://antoniopeng.com


If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !