在Git资料里看见一个标签名,还不足以知道它背后是哪一种对象关系。git-tag官方手册将annotated tag与lightweight tag分别说明:前者有一个tag对象,后者是直接给某个对象的名称。名称相同形式的外观,并不能代替内部关系的说明。
按照DESCRIPTION,附注标签的tag对象包含创建日期、标记者的姓名与电子邮件、标签消息,以及可选的密码学签名。这些信息属于手册所述标签对象,不只是目标提交本身的另一种显示格式。阅读资料时,将标签消息保留为标签消息,才能看清原文在哪一层增加了说明。
轻量标签则被定义为一个对象的名称,通常指向提交对象。手册在前文进一步说,标签引用会直接指向给定对象。因此,区别不在于名字写得长还是短,而在于是否通过所述tag对象表达这组标签信息。把两类都转述成“提交的别名”,会省略附注标签的对象与元数据这一层。
签名需要单独识别。原文用optional修饰附注标签中的密码学签名,说明它并非该类型每个实例都必然具有的内容。仅凭资料写了annotated,不能自动改写为已经签名,更不能进一步称已验证通过。本篇没有读取真实标签、执行验证或判断任何签名的可信程度。
对于版本资料交接,可以分别说明目标对象、标签类型,以及实际资料中是否提供标签消息等信息。一份只列标签名称的清单,尚不足以替这些字段补上内容。这种记录层次的区分,帮助读者理解附注从哪里来,不要求创建、删除或改动仓库标签,也不构成发布流程建议。
本文采用所读git-tag页面的DESCRIPTION完整定义及邻接,页面标示最后更新对应2.55.0,2.56.0条目无变化;未检查读者本机版本。这里不转写命令选项操作,不解释许可证或认证个案。附注标签与轻量标签的核心差异,是tag对象及其元数据是否存在,而不是仅由一个标签名字证明版本发布、签名或安全状态。
信息来源
本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。