17.2 创建里程碑

创建里程碑依然是使用git tag命令。创建里程碑的用法有以下几种:


用法1:git tag<tagname>[<commit>]

用法2:git tag-a<tagname>[<commit>]

用法3:git tag-m<msg><tagname>[<commit>]

用法4:git tag-s<tagname>[<commit>]

用法5:git tag-u<key-id><tagname>[<commit>]


其中:

用法1是创建轻量级里程碑。

用法2和用法3相同,都是创建带说明的里程碑。其中用法3直接通过-m参数提供里程碑创建说明。

用法4和用法5相同,都是创建带GnuPG签名的里程碑。其中用法5用-u参数选择指定的私钥进行签名。

创建里程碑需要输入里程碑的名字(<tagname>)和一个可选的提交ID(<commit>)。

如果没有提供提交ID,则基于头指针HEAD创建里程碑。

17.2.1 轻量级里程碑

轻量级里程碑最简单,创建时无须输入描述信息。我们来看看如何创建轻量级里程碑:

(1)先创建一个空提交。


$git commit—allow-empty-m "blank commit."

[master 60a2f4f]blank commit.


(2)在刚刚创建的空提交上创建一个轻量级里程碑,名为mytag。

省略了<commit>参数,相当于在HEAD上即最新的空提交上创建里程碑。


$git tag mytag


(3)查看里程碑,可以看到该里程碑已经创建。


$git tag-l my*

mytag


1.轻量级里程碑的奥秘

当创建了里程碑mytag后,会在版本库的.git/refs/tags目录下创建一个新文件。

查看一下这个引用文件的内容,会发现是一个40位的SHA1哈希值。


$cat.git/refs/tags/mytag

60a2f4f31e5dddd777c6ad37388fe6e5520734cb


用git cat-file命令检查轻量级里程碑指向的对象。轻量级里程碑实际上指向的是一个提交。


$git cat-file-t mytag

commit


查看该提交的内容,发现就是刚刚进行的空提交。


$git cat-file-p mytag

tree 1d902fedc4eb732f17e50f111dcecb638f10313e

parent 3e6070eb2062746861b20e1e6235fed6f6d15609

author user1<user1@sun.ossxp.com>1293790794+0800

committer user1<user1@sun.ossxp.com>1293790794+0800

blank commit.


2.轻量级里程碑的缺点

轻量级里程碑的创建过程没有记录,因此无法知道是谁创建的里程碑,何时创建的里程碑。在团队协同开发时,尽量不要采用此种偷懒的方式创建里程碑,而是采用后两种方式。

还有git describe命令默认不使用轻量级里程碑生成版本描述字符串。

执行git describe命令,发现生成的版本描述字符串,使用的是前一个版本上的里程碑名称。


$git describe

jx/v1.0-1-g60a2f4f


使用—tags参数,也可以将轻量级里程碑用作版本描述符。


$git describe—tags

mytag