6 版本发行
现代的开发多采用敏捷开发模式,该开发模式可以应需求的快速变化,可以频繁交付新的软件版本,其采用迭代方式逐步完善软件功能。当开发出新的版本生如何进行发布?Git中软件的发行,是通过标签完成的
6.1 什么是标签
一个软件的某个发行版本对应的其实就是软件开发过程中其一阶段的最后一次git commit提交。我们知道每一个git提交,对应的都会有一个commit-id,而标签就是与某一个commit-id绑定的名称。一个标签一旦与某一个commit-id绑定,那么该标签就不能修改绑定到其它commit-id了,除非将该标签删除后才可以与其它commit-id绑定。
6.2 定义标签
Git中的标签分为两种:轻量标签与附注标签。
A.定义轻量标签
修改hello.html文件,添加一行内容“8 Line”,然后add操作,再commit提交。定义刚刚提交的版本为5.0
然后绑定标签与commit-id。该命令规定,若不指定标签绑定的commit-id,则默认为HEAD指定所指向的版本。所以该命令后的commit-id可以省略不写。
如果需要为历史提交中的某个版本指定标签时,则必须指定commit-id。
B 定义附注标签
轻量标签只有标签名称,而使用附注标签,还可以为标签添加说明。
-a选项:指定标签名称
-m选项:设置标签说明
6.3 查看标签
查看标签命令有两个,一个是查看当前系统下的所有标签,一个是查看指定标签的详情。
A.查看所有标签
git tag
B.查看标签的详情:
git show 标签名称
具有说明的标签,同时也会将说明显示,没有说明的,无显示
6.4 修改指定版本的代码
软件版本一旦被指定,即标签一旦与某一commit-id绑定,那么这个版本的代码还能修改吗?若将master回退到该commit-id,然后再修改代码,修改完成后再commit,会发现代码修改过了,但该标签绑定的commit-id并没有发生变化,即该软件版本的代码仍未修改。当然,此时我们可以将该标签删除,然后再定义一个同名标签与修改过代码的commit-id绑定。这样也是可以的。但是这里存在一个巨大的风险,我们修改过的代码是master主分支上的,一旦修改过的代码出现问题,将可以导致整个代码出问题。所以,我们一般不会修改master主分支上的代码。那应该怎么办?Git将标签定义为了与分支同级别的概念,它不仅驻是一个commit-id的别名。Git允许程序员使用分支切换命令git checkout将代码转向标签所指定的版本
命令执行完毕,系统给出了很多的提示,该提示的总体意思为:当前处于“游离”状态,在该状态下用户的任何修改与提交对任何的分支都没有影响(言外之意是:其修改将不会被保留)。若保留修改,则可以通过git checkout –b 命令创建一个新的分支。
在该新分支上再进行修改提交,然后再合并到master分支,最后再将该分支删除。此时创建的分支名称可以随意。当前,合并到master分支后,仍需要删除原标签,然后再与新的commit-id绑定。不过,生产环境下,一旦标签定义完成就不会与删除再绑定了。而是会再定义一个新的标签与新的commit-id绑定。
6.5 推送标签到远程库
前面定义的版本仅仅是定义在本地库,其最终需要推送到远程版本库作为一个发行版本出现。可以通过以下两种方式:
A.推送指定标签
git push origin v4.0
B.推送所有标签
git push origin --tags
该命令会将所有未推送的标签全部推送到远程库
C.GitHub查看推送结果
登录GitHub并打开远程版本库页面,在release中可以看到推送到远程库中的标签,即发行版本。
其他用户在更新本地版本库时,会将标签一并更新,然后可以指定标签版本作为一个新的分支进行编辑,编辑完成后再合并到master,最后将该分支删除。
6.6 删除标签
A.删除本地标签
git tag -d v4.0
B.删除远程标签:
git push origin:refs/tags/v4.0
若要删除远程库中的标签,首先要删除本地库中的该标签,然后再运行如下命令