查询:
git tag //显示当前的标签 git tag -l v1.4.* //显示以v1.4.开头的标签
创建:
可以创建不带注释和带注释的两种标签。
“在git中有两种最主要的标签--轻量级标签(lightweight)和带注释的标签(annotated)。 轻量级标签跟分枝一样,不会改变--它就是针对某个特定提交的指针。 然而,带注释的标签是git仓库中的对象。它是一组校验和,包含标签名、email、日期,标签信息,GPG签名和验证。 一般情况下,建议创建带注释的标签,这样就会保留这些信息,但是如果你只是需要临时性标签或者某些原因你不想在标签中附带上面说的这些信息,lightweight标签更合适些。””
带注释的标签
在git中创建带注释的标签非常简单,在运行'tag'命令时加上-a就可以了。
$ git tag -a v1.4 -m 'my version 1.4' $ git tag v0.1 v1.3 v1.4
'-m'指明标签信息,跟标签一起存储。如果你不使用-m指明标签信息,git会自动启动文本编辑器让你输入。
可以使用 git show 命令查看相应标签的版本信息,并连同显示打标签时的提交对象。
$ git show v1.4 tag v1.4 Tagger: XX <[email protected]> Date: Mon Feb 9 14:45:11 2009 -0800 my version 1.4 commit 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge: 4a447f7... a6b4c97... Author: XX <[email protected]> Date: Sun Feb 8 19:02:46 2009 -0800 Merge branch 'experiment'
如果你有GPG私钥的话,你也可以用GPG来给你的标签签名,把-a换成-s就可以了:
[master]$ git tag -s v1.5 -m 'my signed 1.5 tag' You need a passphrase to unlock the secret key for user: "XX <[email protected]>" 1024-bit DSA key, ID F721C45A, created 2009-02-09
然后,如果你对某个标签运行'git show'的话,你就会看到你的GPG前面附加上去了。
[master]$ git show v1.5 tag v1.5 Tagger: Scott Chacon <[email protected]> Date: Mon Feb 9 15:22:20 2009 -0800my 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: XX <[email protected]> Date: Sun Feb 8 19:02:46 2009 -0800 Merge branch 'experiment'
轻量级标签:
轻量级标签实际上就是存在一个文件中的提交校验和--没有附加任何其他信息。创建轻量级标签的方法就是把上面'-a','-s','-m'这些选项都去掉。
$ git tag v1.4-lw
验证标签
使用'git tag -v tag'就可以验证一个签名标签了。这个命令会用到GPG来验证签名。前提是:你必须在密钥环中存放着签名者的公钥。
后期贴标签
这种情况是说你想对以前的某次提交贴个标签,如果整个提交历史是这样的:
$ git log --pretty=oneline 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment' a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support
你可以在执行创建标签的语句后面跟上那次提交的校验和(或者部分校验和):
$ git tag -a v1.2 a6b4c97
共享标签:
默认情况下,'git push'命令不会将标签上传到远程服务器上。为了共享这些标签,你必须在'git push'命令后明确添加--tags选项
$ git push --tags
[user] name = yourname email = [email protected] [core] excludesfile = /Users/may/.gitignore_global [difftool "sourcetree"] cmd = opendiff \"$LOCAL\" \"$REMOTE\" path = [mergetool "sourcetree"] cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" - merge \"$MERGED\" trustExitCode = true [push] default = simple [alias] st = status