Git标签管理

前面的话

发布一个版本时,我们通常先在版本库中打一个标签(tag)。这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照,实质上它就是指向某个commit的指针。所以,创建和删除标签都是瞬间完成的。简而言之,标签tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。本文将详细介绍Git标签管理

创建标签

在Git中打标签非常简单,首先,切换到需要打标签的分支上

然后,敲命令git tag <name>就可以打一个新标签

可以用命令git tag查看所有标签

默认标签是打在最新提交的commit上的。有时候,如果忘了打标签怎么办呢?方法是找到历史提交的commit id,然后打上就可以了

比方说要对create b.txt这次提交打标签,它对应的commit id是7ec9296,敲入命令:

再用命令git tag查看标签,注意,标签不是按时间顺序列出,而是按字母排序的

可以用git show <tagname>查看标签信息

附注标签

实际上,Git使用的标签有两种类型:轻量级的(lightweight)和含附注的(annotated)。上面介绍的就是轻量级标签,轻量级标签就像是个不会变化的分支,实际上它就是个指向特定提交对象的引用。而含附注标签,实际上是存储在仓库中的一个独立对象,它有自身的校验和信息,包含着标签的名字,电子邮件地址和日期,以及标签说明,标签本身也允许使用GNU Privacy Guard(GPG)来签署或验证。一般我们都建议使用含附注型的标签,以便保留相关信息;当然,如果只是临时性加注标签,或者不需要旁注额外信息,用轻量级标签也没问题

创建一个含附注类型的标签非常简单,用-a(取annotated的首字母,中文意思为注释)指定标签名字即可,而-m选项则指定了对应的标签说明,Git会将此说明一同保存在标签对象中。如果没有给出该选项,Git会启动文本编辑软件供你输入标签说明

$ git tag -a v1.4 -m 'my version 1.4'

我们可以看到在提交对象信息上面,列出了此标签的提交者和提交时间,以及相应的标签说明

签署标签

如果有自己的私钥,还可以用GPG来签署标签,只需要把之前的-a改为-s(取signed的首字母,中文意思为有符号的)即可

$ git tag -s v0.2 -m 'signed version 0.2 released'

签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错

现在再运行 git show 会看到对应的 GPG 签名也附在其内

$ git show v0.2
tag v0.2
Tagger: Michael Liao <askxuefeng@gmail.com>
Date: Mon Aug 26 07:28:33 2013 +0800

signed version 0.2 released
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (Darwin)

iQEcBAABAgAGBQJSGpMhAAoJEPUxHyDAhBpT4QQIAKeHfR3bo...
-----END PGP SIGNATURE-----

commit fec145accd63cdc9ed95a2f557ea0658a2a6537f
Author: Michael Liao <askxuefeng@gmail.com>
Date: Thu Aug 22 10:37:30 2013 +0800

branch test

用PGP签名的标签是不可伪造的,因为可以验证PGP签名

可以使用git tag -v [tagname] (取verify的首字母,中文意思为核实)的方式验证已经签署的标签。此命令会调用GPG来验证签名,所以你需要有签署者的公钥,存放在keyring中,才能验证

$ git tag -v v1.4.2.1
object 883653babd8ee7ea23e6a5c392bb739348b1eb61
type commit
tag v1.4.2.1
tagger Junio C Hamano <junkio@cox.net> 1158138501 -0700

GIT 1.4.2.1

Minor fixes since 1.4.2, including git-mv and git-http with alternates.
gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A
gpg: Good signature from "Junio C Hamano <junkio@cox.net>"
gpg:     aka "[jpeg image of size 1513]"
Primary key fingerprint: 3565 2A26 2040 E066 C9A7 4A7D C0C6 D9A4 F311 9B9A

若是没有签署者的公钥,会报告类似下面这样的错误:

gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A
gpg: Can't check signature: public key not found
error: could not verify the tag 'v1.4.2.1'

操作标签

如果标签打错了,也可以删除

$ git tag -d <tagname>

因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

默认情况下,git push并不会把标签传送到远端服务器上,只有通过显式命令才能推送标签到远端仓库

$ git push origin <tagname>

或者,一次性推送全部尚未推送到远程的本地标签

$ git push origin --tags

如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除

然后,从远程删除。删除命令也是push,但是格式如下

最后一个问题,如何查看发送到远程的标签呢?

点击Github项目中的release

即可看到远程标签的信息

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我们!

(0)

相关推荐

  • Git 教程之标签详解

    Git 标签 如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签. 比如说,我们想为我们的 w3cschoolcc 项目发布一个"1.0"版本. 我们可以用 git tag -a v1.0 命令给最新一次提交打上(HEAD)"v1.0"的标签. -a 选项意为"创建一个带注解的标签". 不用 -a 选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加个标签的注解. 我推荐一直创

  • jQuery标签编辑插件Tagit使用指南

    一.Tagit插件功能 提高网站交互性,增加用户体验.至于其它的功能,还真没有.用一个input text就可以替换了它.但是text没有输入提示功能,而tagit拥有这个功能.官方示例如下图: 将关键词标签化,成为一个整体.方便删除与浏览. 二.Tagit官方地址 http://aehlke.github.io/tag-it/ 官方地址上有使用说明,也有用例.用例的颜色搭配也可以选择.不过选来选去也就是这几种,Tagit插件使用jqueryui,所以jqueryui提供的样式也兼容.jquer

  • Git标签管理

    前面的话 发布一个版本时,我们通常先在版本库中打一个标签(tag).这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照,实质上它就是指向某个commit的指针.所以,创建和删除标签都是瞬间完成的.简而言之,标签tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起.本文将详细介绍Git标签管理 创建标签 在Git中打标签非常简单,首先,切换到需要打标签的分支上 然后,敲命令git tag

  • git标签管理_动力节点Java学院整理

    发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照. Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的. Git有commit,为什么还要引入tag? "请把上周一的那个版本打包发布,commit号是6a5819e..." &qu

  • C#微信开发之微信公众号标签管理功能

    微信公众号,仿照企业号的思路,增加了标签管理的功能,对关注的粉丝可以设置标签管理,实现更加方便的分组管理功能.开发者可以使用用户标签管理的相关接口,实现对公众号的标签进行创建.查询.修改.删除等操作,也可以对用户进行打标签.取消标签等操作.本篇随笔主要介绍如何利用C#对公众号这个较新的特性进行封装,实现对标签的管理功能. 1.标签功能介绍 1)标签功能替代分组功能,支持多维度定义用户属性 运营者可登录公众平台后台,点击左侧菜单"用户管理"后管理已关注用户,点击其中一个用户右侧的&quo

  • Git 标签使用详解

    Git跟其他版本控制系统一样,可以打标签(tag)标记一个版本号. 发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照. Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的. 一.列出标签 1. 列出当前仓库的所有标签:git tag 2. 列出所有标

  • VS2019中Git源代码管理实现总结

    一.将VS2019中已有的项目与远程库进行连接   0.GitHub中创建远程库 首先在GitHub中创建一个库,并且这个库不要勾选上readme这个选项,(自己在尝试时如果Github上初始创建的项目带有readme,刚开始我进行推送总是报错,等待解答),创建完成之后剩下的操作在VS2019中进行 1.设置源代码插件 此步在VS中设置完一次后就可以不用再次设置了2.添加源代码管理 右击解决方案,添加到源代码管理 3.设置远程库地址 点击设置 选择存储库设置 点击编辑 4.将本地库内容提交 团队

  • Git Submodule管理项目子模块的使用

    使用场景 当项目越来越庞大之后,不可避免的要拆分成多个子模块,我们希望各个子模块有独立的版本管理,并且由专门的人去维护,这时候我们就要用到git的submodule功能. 常用命令 git clone <repository> --recursive 递归的方式克隆整个项目 git submodule add <repository> <path> 添加子模块 git submodule init 初始化子模块 git submodule update 更新子模块 gi

  • VS Code使用Git可视化管理源代码详细教程(推荐)

    前言: 随着VS Code的功能和插件的不断强大和完善,它已经成为了我们日常开发中一个必不可缺的伙伴了.在之前我曾经写过一篇SourceTree使用教程详解(一个git可视化管理神器,想要了解的话可以点击查看详情),这篇文章主要是对VS Code如何使用Git可视化管理我们的程序源代码. VS Code简介: 官网下载地址: https://code.visualstudio.com/ Visual Studio Code是一个轻量级但功能强大的源代码编辑器,可在您的桌面上运行,并且可用于Win

  • Git分支管理策略

    目录 一.创建测试项目 1.新建GitHub仓库 2.将本地仓库项目上传到GitHub 2.1.初始化本地仓库 2.2.把文件添加到暂存区 2.3.提交到本地仓库 2.4.关联远程GitHub仓库 2.5.将本地仓库推送到远程仓库 2.6.查看状态 二.管理分支 1.创建本地仓库新分支 2.查看新创建的分支是否成功 3.切换分支 4.查看当前分支 5.将创建的分支推送到远程仓库 6.修改文件 7.将修改后的文件提交到暂存区 8.提交到本地仓库 9.推送到远程仓库 10.查看文件状态 11.合并到

  • element tab标签管理路由页面的项目实践

    目录 样式 准备 思路 搭建 搭建页面框架 准备状态管理 监听路由变化 tab方法 登录 与 退出登录 样式 准备 搭建好的vue脚手架(elementui,router,vuex) elementui(NavMenu 导航菜单,Tabs 标签页) 思路 将打开的所有路由放到一个栈里(openTab:[]),tabs显示遍历openTab 初始状态,将首页推入栈,并设置激活状态 当切换路由时(监听路由变化),判断栈里是否存在这个路由,若存在,只改变激活状态:若不存在,则推入栈,并改变激活状态.

  • 浅谈Git分支管理策略

    如果你严肃对待编程,就必定会使用"版本管理系统"(Version Control System). 眼下最流行的"版本管理系统",非Git莫属. 相比同类软件,Git有很多优点.其中很显著的一点,就是版本的分支(branch)和合并(merge)十分方便.有些传统的版本管理软件,分支操作实际上会生成一份现有代码的物理拷贝,而Git只生成一个指向当前版本(又称"快照")的指针,因此非常快捷易用. 但是,太方便了也会产生副作用.如果你不加注意,很可能

随机推荐