深入Git标签:为你的项目打上完美标记

一、什么是Git标签?

在 Git 中,标签(Tag)是用来给特定的提交(commit)打一个简单的标记,通常用于标识版本发布。标签的功能类似于分支,不过标签是不可移动的固定指针,通常用于标识某个版本的快照。
在这里插入图片描述

Git 中有两种类型的标签:

  1. 轻量标签(Lightweight Tag):这种标签就是一个指向特定提交的引用,没有附加的元数据,例如创建者、时间和信息。它类似于一个分支,但是不会随着新的提交而移动。

  2. 附注标签(Annotated Tag):这种标签是一个完整的对象,在标签中包含了作者信息、日期、标签信息等,适合正式发布的版本。

Git 标签与分支的区别:

  1. 分支:用于开发新特性、修复问题等。它是一个独立的开发线,允许你在不影响主线(通常是 mainmaster)的情况下进行开发。而 标签是用于给特定的提交打上标记,通常是在发布版本时;标签是对某个特定提交的引用,常用于版本控制和发布历史的标识。

  2. 分支是可变的,可以随时向前移动、合并或删除;它们会随着新的提交而更新。标签是不可变的,一旦创建,标签所指向的提交不会改变;标签通常用于固定某个版本或状态。

  3. 分支通常用于活跃的开发过程中,可以随时切换、合并、删除等。 标签用于标识特定的版本,通常在发布的时候创建,一般不会在其后进行修改。

  4. 分支在 Git 内部是一个可变的指针,指向最新的提交。 标签在 Git 内部也是一个指针,但它通常是指向特定的提交,表示一个固定的版本。

使用 Git 标签的场景主要包括:

  1. 版本发布:当准备发布一个新版本的代码时,通常会创建一个标签。这样可以快速定位到特定版本的代码。

  2. 里程碑标记:在项目开发的过程中,可以使用标签来标记重要的里程碑,比如完成某个功能或修复重要的bug。

  3. 回滚:如果某个版本的代码出现了问题,可以通过标签快速找到并回滚到之前的稳定版本。

  4. 发布管理:在持续集成和持续部署的流程中,标签可以帮助自动化工具识别应当发布的版本。

二、创建标签

当我们发布一个重要的版本的时候,可以使用git tag去创建一些标签,标识版本的对应的代码。tag分两种:一种是轻量级的,一种是含注解的标签。

轻量标签是一个直接指向某个具体提交的引用,与分支类似。它不会存储发布信息、创建者信息或时间戳等附加信息。 特点:

  1. 简单性:轻量标签非常简单,实际上就是一个指向某个提交的指针,不包含其他信息。

  2. 速度:因为只需存储一个提交指针,它的创建和访问都很快。

  3. 不带附加信息:轻量标签没有与其关联的元数据,例如创建者、日期或注释。

  4. 易于创建:使用命令 git tag <tagname> 可以轻松创建轻量标签。

  5. 不适合发布版本:由于轻量标签缺少完整的上下文信息,不太适合用于正式的版本发布管理,这通常需要使用“注解标签”。

创建示例:

# 创建一个名为 v1.0 的轻量标签,指向当前所在的提交。
git tag v1.0

附注标签 是指带有额外信息的标签,它不仅仅是指向某个提交的指针,还包含作者、日期和可选的消息。特点:

  1. 包含元数据:附注标签包含标签的创建者信息(包括姓名和电子邮件),标签创建的日期,以及附加的标签信息(消息)。

  2. 可签名:附注标签可以通过 GPG 签名,增加安全性和可信度,这在发布版本时尤其有用。

  3. 持久性:附注标签被存储在 Git 的数据库中,更加持久和可靠,而轻量标签只是一个简单的引用。

  4. 适合版本发布:通常用于标记软件的发布版本,附注标签可以清晰地记录版本的发布信息。

  5. 可以被查看:使用 git show <tag> 命令可以查看附注标签的详细信息,包括指向的提交和附注消息。

创建附注标签:

git tag -a <tagname> -m "your message"

例子:

git tag -a v1.0 -m "Release version 1.0"

整体示例:

git tag v0.10.15
git tag v0.10.13 612931c0f 
git tag –a v0.10.9 –m "bumped version to 0.10.9" 89de7802

在这里插入图片描述

三、签署标签

创建了标签,可是如何防止对标签进行权限管理呢?防止没有权限的开发人员篡改标签的所对应的代码。

为什么说安全的?以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签名验证不通过的问题,也就是说这样的修改是不生效的。

可能还是不太好理解,以坑作为示例,repo在某个版本有个小错误,我在这个版本修复错误后,提交到内网的服务器给同事用(我重新定义这个版本的指向),最后发现同事在更新项目后,出现版本GPG签名验证错误,不能正常使用。

如何安装gnupg

  • ubuntu安装gnupgsudo apt install gnupg
  • Centos安装gnupgyum install gnupg

使用gnupg

gpg --gen-key   # 生成秘钥
gpg --list-keys   # 查看秘钥

关于秘钥更多操作可以参考:https://www.ruanyifeng.com/blog/2013/07/gpg.html

创建带GPG签名的git tag:

Git tag -s v0.10.9 –u "Lion Long" –m "bumped version v0.10.9" 89de7802

四、操作和管理标签

创建完一个tag后,可以使用git show tag_name去查看tag的内容:

git tag             # 列举所有的tag
git show v0.10.13   # 查看v0.10.13的内容

推送标签到远程服务器:

git push origin tag_name # 推送tag到远程服务器
git push origin --tags   # 推送所有的tag到远程服务器

检出tag的代码:

git checkout tag_name   # 检出tag的代码

删除标签:

# 语法
git push --delete <remote-name> <tag-name>

# 删除本地tag
git tag –d tag_name    
# 删除远程tag
git push origin :refs/tags/tag_name   

五、总结

Git 标签是软件开发中一个非常重要的工具,它们用于标记特定的版本或重要的提交,使得版本管理更加高效和便捷。

在项目中有效地使用 Git 标签,不仅可以提升团队的工作效率,还能在发布管理、版本控制等多个方面提供便利。建议大家在每次发布前创建标签,以保证项目的每一个重要状态都有记录,并随时保持对历史版本的访问能力。

在这里插入图片描述

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lion Long

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值