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