Git标签

Git 也可以对某一时间点上的版本打上标签。人们在发布某个软件版本(比如 v1.0 等等)的时候,经常这么做。

1.列显已有的标签

列出现有标签的命令非常简单,直接运行 git tag 即可:

git tag
v0.1
v1.3

显示的标签按字母顺序排列,所以标签的先后并不表示重要程度的轻重。

我们可以用特定的搜索模式列出符合条件的标签。在 Git 自身项目仓库中,有着超过 240 个标签,如果你只对 1.4.2 系列的版本感兴趣,可以运行下面的命令:

 git tag -l ‘v1.4.2.*‘
v1.4.2.1
v1.4.2.2
v1.4.2.3
v1.4.2.4

2.新建标签

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

2.1.含附注的标签

创建一个含附注类型的标签非常简单,用 -a (取 annotated 的首字母)指定标签名字即可:

git tag -a v1.4 -m ‘my version 1.4‘
git tag
v0.1
v1.3
v1.4

而 -m 选项则指定了对应的标签说明,Git 会将此说明一同保存在标签对象中。如果在此选项后没有给出具体的说明内容,Git 会启动文本编辑软件供你输入。
可以使用 git show 命令查看相应标签的版本信息,并连同显示打标签时的提交对象。

git show v1.4
tag v1.4
Tagger: Scott Chacon <[email protected]>
Date: Mon Feb 9 14:45:11 2009 -0800
my version 1.4
commit 15027957951b64cf874c3557a0f3547bd83b3ff6
Merge: 4a447f7... a6b4c97...
Author: Scott Chacon <[email protected]>
Date: Sun Feb 8 19:02:46 2009 -0800
Merge branch ‘experiment‘

2.2.签署标签

如果你有自己的私钥,还可以用 GPG 来签署标签,只需要把之前的 -a 改为 -s (取 Signed 的首字母)即可:

git tag -s v1.5 -m ‘my signed 1.5 tag‘
You need a passphrase to unlock the secret key for
user: "Scott Chacon <[email protected]>"
1024-bit DSA key, ID F721C45A, created 2009-02-09

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

git show v1.5
tag v1.5
Tagger: Scott Chacon <[email protected]>
Date: Mon Feb 9 15:22:20 2009 -0800
my signed 1.5 tag
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (Darwin)
iEYEABECAAYFAkmQurIACgkQON3DxfchxFr5cACeIMN+ZxLKggJQf0QYiQBwgySN
Ki0An2JeAVUCAiJ7Ox6ZEtK+NvZAj82/
=WryJ
-----END PGP SIGNATURE-----
commit 15027957951b64cf874c3557a0f3547bd83b3ff6
Merge: 4a447f7... a6b4c97...
Author: Scott Chacon <[email protected]>
Date: Sun Feb 8 19:02:46 2009 -0800
Merge branch ‘experiment‘

如果你要创建经签署的含附注的标签,那么把你的GPG签署密钥设置为配置项会更好,设置密钥ID如下:

 git config --global user.signingkey <gpg-key-id>

现在你能够签署标签,从而不必每次运行git tag命令时定义密钥:

git tag -s <tag-name>

2.4.轻量级标签

轻量级标签实际上就是一个保存着对应提交对象的校验和信息的文件。要创建这样的标签,一个 -a, -s 或 -m 选项都不用,直接给出标签名字即可:

git tag v1.4-lw
git tag
v0.1
v1.3
v1.4
v1.4-lw
v1.5

现在运行 git show 查看此标签信息,就只有相应的提交对象摘要:

git show v1.4-lw
commit 15027957951b64cf874c3557a0f3547bd83b3ff6
Merge: 4a447f7... a6b4c97...
Author: Scott Chacon <[email protected]>
Date: Sun Feb 8 19:02:46 2009 -0800
Merge branch ‘experiment‘

3.验证标签

可以使用

git tag -v [tag-name] 

(取 verify 的首字母)的方式验证已经签署的标签。此命令会调用 GPG 来验证签名,所以你需要有签署者的公钥,存放在 keyring 中,才能验证:

git tag -v v1.4.2.1
object 883653babd8ee7ea23e6a5c392bb739348b1eb61
type commit
tag v1.4.2.1
tagger Junio C Hamano <[email protected]> 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 <[email protected]>"
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‘

4.后期加注标签

你甚至可以在后期对早先的某次提交加注标签。比如在下面展示的提交历史中:

git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch ‘experiment‘
a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support
0d52aaab4479697da7686c15f77a3d64d9165190 one more thing
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch ‘experiment‘
0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function
4682c3261057305bdd616e23b64b0857d832627b added a todo file
166ae0c4d3f420721acbb115cc33848dfcc2121a started write support
9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile
964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo
8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme

我们忘了在提交 “updated rakefile” 后为此项目打上版本号 v1.2,没关系,现在也能做。只要在打标签的时候跟上对应提交对象的校验和(或前几位字符)即可

 git tag -a v1.2 9fceb02

5.分享标签

默认情况下, git push 并不会把标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。其命令格式如同推送分支,运行

 git push origin [tagname] 

即可:

如果要一次推送所有(本地新增的)标签上去,可以使用 --tags 选项:

git push origin --tags
Counting objects: 50, done.
Compressing objects: 100% (38/38), done.
Writing objects: 100% (44/44), 4.56 KiB, done.
Total 44 (delta 18), reused 8 (delta 1)
To [email protected]:schacon/simplegit.git
* [new tag] v0.1 -> v0.1
* [new tag] v1.2 -> v1.2
* [new tag] v1.4 -> v1.4
* [new tag] v1.4-lw -> v1.4-lw
* [new tag] v1.5 -> v1.5

现在,其他人克隆共享仓库或拉取数据同步后,也会看到这些标签。

6.tag和branch的关系

(1)tag和branch本质上没有区别,都是指向某个commit的指针。
(2)实际上,它们都在.git/refs下以文件形式保存,文件的内容就是一个commit号
(3)在文件系统中它们的区别在于,tag会存放在.git/refs/tags,branch存放在.git/refs/heads
(4)对于branch,可以在git clone命令中指定git clone <git url> -b <branchname> 相当于 git clone <git url>; git checkout <branchname>
(5)但对于tag,只能在git clone完成后,通过git checkout <tagname>的方式切换。
(6)tag被赋予的涵义是库的一个有特定意义snapshot
(7)在gerrit系统中,tag和branch的修改权限是分别设定的,tag一般不允许修改

时间: 2024-12-19 17:32:16

Git标签的相关文章

Git 标签

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

2016/01/14开始学习git:标签管理:操作标签

一.删除本地标签 如果标签打错了,也可以删除:git tag -d v0.1 因为创建的标签都只存储在本地,不会自动推送到远程.所以,打错的标签可以在本地安全删除. 二.推送标签如果要推送某个标签到远程,使用命令git push origin <tagname>:git push origin v1.0或者,一次性推送全部尚未推送到远程的本地标签:git push origin --tags 三.删除远程标签如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:git tag -d

2016/01/14开始学习git:标签管理:创建标签

标签也是版本库的一个快照指向某个commit的指针(分支可以移动,标签不能移动) 切换到需要打标签的分支上git tag <name>就可以打一个新标签: $ git tag v1.0 git tag查看所有标签: $ git tagv1.0 打之前提交的版本的commit需要当时的commit ID$ git tag v0.9 93ddf60 查看tag$ git tagv0.9v1.0 标签不是按时间顺序列出,而是按字母排序的.可以用git show <tagname>查看标签

Git标签管理

发布一个版本时,我们通常会在版本库中打上一个标签,这样,就唯一确定了打标签时刻的版本了,将来无论什么时候,取某个标签的版本,就是 把那个打标签的时刻的历史版本取出来,所以,标签也是版本库的一个快照,Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针 (跟分支很像,但是分支可以移动,标签不能移动),所以创建和删除一个标签都是在一瞬间完成的. 在Git中打标签非常简单,首先切换到需要打标签的分支上: 输入git tag name 就可以打一个新的标签: $ git tag v1.

Git 标签操作

允许有意义的名称到一个特定的版本库中的标签操作.Tom 决定标记他们的项目代码,以便他们以后可以更容易访问. 创建标签 让我们标记当前HEAD使用git tag命令.他提供的标记名称前加上-a选项,使用-m选项,并提供标签信息. [email protected] project]$ pwd /home/tom/top_repo/project [[email protected] project]$ git tag -a ‘Release_1_0′ -m ‘Tagged basic strin

git 标签管理

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

Git标签与别名

code[class*="language-"] { padding: .1em; border-radius: .3em; white-space: normal; background: #f5f5f5; } .token.comment, .token.blockquote { color: #969896; } .token.cdata { color: #183691; } .token.doctype, .token.punctuation, .token.variable

GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流(转载)

最近听同事说他都在使用GitHub,GitHub是程序员的社区,在里面可以学到很多书上学不到的东西,所以最近在准备入手这方面的知识去尝试学习,正好碰到这么详细完整的文章,就转载了,希望对自己和大家有帮助. GitHub操作总结 : 总结看不明白就看下面的详细讲解. GitHub操作流程 : 第一次提交 : 方案一 : 本地创建项目根目录, 然后与远程GitHub关联, 之后的操作一样; -- 初始化Git仓库 :git init ; -- 提交改变到缓存 :git commit -m 'desc

Git基础-打标签

打标签 同大多数 VCS 一样,Git 也可以对某一时间点上的版本打上标签.人们在发布某个软件版本(比如 v1.0 等等)的时候,经常这么做.本节我们一起来学习如何列出所有可用的标签,如何新建标签,以及各种不同类型标签之间的差别. 列显已有的标签 列出现有标签的命令非常简单,直接运行 git tag 即可: 我们可以用特定的搜索模式列出符合条件的标签.在 Git 自身项目仓库中,有着超过 240 个标签,如果你只对 AR_POC 系列的版本感兴趣,可以运行下面的命令: 新建标签 Git 使用的标