精通git中文版(连载八)

3.6 标签(Tagging)

  与大多数VCS相似,Git具备标识一个特定历史时刻点作为重要标识的能力。通常情况下,人们用这个功能来标识一个release(v1.0等等)。在本节中,你会学习到怎么列出可用的标签(tags),怎么创建新的标签(tags)以及什么是不同类型的标签。

  3.6.1 列出你的标签(Listing Your Tags)

  列出Git中可用的标签非常直接,只需要输入git tag:

  $ git tag

  v0.1

  v1.3

  这个命令以字母顺序列出标签。它们显示的顺序没有什么实际的重要意义。

  你也可以使用特定的格式来查找标签(tags)。例如,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

 

  3.6.2 创建标签(Creating Tags)

  Git使用两类标签(tags):轻型的和标注型的。轻型标签很像一个不能更改的分支――它只是一个指针指向了一个特定的提交。然而,标注型标签在git数据库中是按整个对象存储的。它们是校验的,包含了标签者的名称,e-mail以及日期,一个标签消息,它可以被签名以及使用GNU隐私保护(GPG)来验证。通常建议你创建一个标注型的标签,这样你可以拥有所有这些信息,但如果无论什么原因,你需要一个临时标签而不想保存其它信息,轻型标签也是可用的。


  3.6.3 标注标签(Annotated Tags)

  在git中创建一个标注标签很简单。最简单的方式是指定一个-a参数当你运行tag命令时:

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

  $ git tag

  v0.1

  v1.3

  v1.4

  -m参数用来指定一个标签消息,它与tag一起存储。如果对标注型标签,你不指定消息,则git会调用你的编辑器这样你可以用这个编辑器输入一个消息。

  使用git show命令,你会看到标签数据以及被标记的提交:

  $ git show v1.4

  tag v1.4

  Tagger: Scott Chacon <schacon@gee-mail.com>

  Date: Mon Feb 9 14:45:11 2009 -0800

  my version 1.4

  commit 15027957951b64cf874c3557a0f3547bd83b3ff6

  Merge: 4a447f7... a6b4c97...

  Author: Scott Chacon <schacon@gee-mail.com>

  Date: Sun Feb 8 19:02:46 2009 -0800

  Merge branch 'experiment'

  这显示了标签者的信息,被标记的那个提交的日期,标注的消息;这些会在显示提交信息前被显示。

 

  3.6.4 签署标签(Signed Tags)

  如果你有一个私钥的话,你也可以使用GPG对你的标签进行签名。 你要做的是使用-s代替-a:

  $ git tag -s v1.5 -m 'my signed 1.5 tag'

  You need a passphrase to unlock the secret key for

  user: "Scott Chacon <schacon@gee-mail.com>"

  1024-bit DSA key, ID F721C45A, created 2009-02-09

  

  如果你在那个标签上运行git show,你会看到你的GPG签名已经附加进去了:

  $ git show v1.5

  tag v1.5

  Tagger: Scott Chacon <schacon@gee-mail.com>

  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 <schacon@gee-mail.com>

  Date: Sun Feb 8 19:02:46 2009 -0800

  Merge branch 'experiment'

  稍后,你会学习怎么校验签名标签。

 

  3.6.5 轻型标签(Lightweight Tags)

  另外一种标记提交的方法是使用轻型标签。这是一个基本的存储在文件中提交的校验和――没有保存其它信息。为了创建一个轻型标签,不要应用-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 <schacon@gee-mail.com>

  Date: Sun Feb 8 19:02:46 2009 -0800

  Merge branch 'experiment'

 

  3.6.6 校验标签(Verifying Tags)

  为了校验一个签名的标签,你可以使用git tag –v [tag-name]。这个命令使用GPG来校验签名。你需要在你的钥匙链中有签名者的公钥才能使本命令正常工作:

  $ 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'

  

  3.6.7 延迟标记(Tagging Later)

  你也可以在你过去的一个提交上打标签。假设你的提交历史看起来如下:

  $ 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

  现在,假设你忘了在项目的v1.2”updated rakefile”提交上做标记。你可以在事后补加这个标记,为了标记这个提交,你需要在命令的最后指定提交的校验和(或者部分校验和):

  $ git tag -a v1.2 9fceb02

  你可以看到你已经标记了这个提交:

  $ git tag

  v0.1

  v1.2

  v1.3

  v1.4

  v1.4-lw

  v1.5

  $ git show v1.2

  tag v1.2

  Tagger: Scott Chacon <schacon@gee-mail.com>

  Date: Mon Feb 9 15:32:16 2009 -0800

  version 1.2

  commit 9fceb02d0ae598e95dc970b74767f19372d61af8

  Author: Magnus Chacon <mchacon@gee-mail.com>

  Date: Sun Apr 27 20:43:35 2008 -0700

  updated rakefile

  ...

 

  3.6.8 共享标签(Sharing Tags)

  缺省情况下,git push命令不会传递标签到远端服务器上。在你创建了标签后,你需要显式地把标签上传到共享的服务器上。这个过程就像共享远端分支一样――你可以运行git push origin [tagname].

  $ git push origin v1.5

  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 git@github.com:schacon/simplegit.git

  * [new tag] v1.5 -> v1.5

  如果你有很多标签想一次性上传,你可以在git push命令中使用--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 git@github.com: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

  现在,当其它人clone或者从你的库下载(pull)时,他们也将会得到你所有的标签(tags)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值