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