use*_*301 274 tags git git-tag
如果我想标记当前提交.我知道以下两个命令行都有效:
git tag <tagname>
Run Code Online (Sandbox Code Playgroud)
和
git tag -a <tagname> -m '<message>'
Run Code Online (Sandbox Code Playgroud)
这些命令有什么区别?
Tod*_*obs 214
命令之间的区别在于,一个命令会为您提供标记消息,而另一个则不提供.带注释的标签有一条可以用git-show(1)显示的消息,而没有注释的标签只是一个指向提交的命名指针.
根据文档:"要创建轻量级标记,请不要提供任何-a,-s或-m选项,只需提供标记名称".在带注释的标签上写入消息还有一些不同的选项:
git tag <tagname>,Git将在当前版本中创建一个标记,但不会提示您注释.它将被标记而没有消息(这是一个轻量级标记).git tag -a <tagname>,Git会提示您输入注释,除非您还使用了-m标志来提供消息.git tag -a -m <msg> <tagname>,Git将标记提交并使用提供的消息对其进行注释.git tag -m <msg> <tagname>,Git的行为就像您传递了注释的-a标志并使用提供的消息一样.基本上,它只是等于您是否希望标签具有注释以及与之相关的其他信息.
Cir*_*四事件 181
推送带注释的标签,保持轻量级本地
man git-tag 说:
带注释的标签用于发布,而轻量级标签用于私有或临时对象标签.
某些行为会以这种建议有用的方式区分它们,例如:
带注释的标签可以包含与它们指向的提交不同的消息,创建者和日期.因此,您可以使用它们来描述发布而无需进行发布提交.
轻量级标签没有这些额外信息,也不需要它,因为您只是自己使用它来开发.
git describe 没有命令行选项只能看到带注释的标签内部差异
轻量级和带注释的标签都是.git/refs/tags包含SHA-1的文件
对于轻量级标签,SHA-1直接指向提交:
git tag light
cat .git/refs/tags/light
Run Code Online (Sandbox Code Playgroud)
打印与HEAD的SHA-1相同.
所以难怪他们不能包含任何其他元数据.
带注释的标签指向对象数据库中的标签对象.
git tag -as -m msg annot
cat .git/refs/tags/annot
Run Code Online (Sandbox Code Playgroud)
包含带注释的标记对象的SHA:
c1d7720e99f9dd1d1c8aee625fd6ce09b3a81fef
Run Code Online (Sandbox Code Playgroud)
然后我们可以通过以下方式获取其内容:
git cat-file -p c1d7720e99f9dd1d1c8aee625fd6ce09b3a81fef
Run Code Online (Sandbox Code Playgroud)
样本输出:
object 4284c41353e51a07e4ed4192ad2e9eaada9c059f
type commit
tag annot
tagger Ciro Santilli <your@mail.com> 1411478848 +0200
msg
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
<YOUR PGP SIGNATURE>
-----END PGP SIGNAT
Run Code Online (Sandbox Code Playgroud)
这就是它包含额外元数据的方式.正如我们从输出中看到的,元数据字段是:
格式的更详细分析存在于:git标记对象的格式是什么以及如何计算其SHA?
奖金
确定标签是否已注释:
git cat-file -t tag
Run Code Online (Sandbox Code Playgroud)
输出commit为轻量级,tag用于注释.
仅列出轻量级标签:如何列出所有轻量级标签?
| 归档时间: |
|
| 查看次数: |
82955 次 |
| 最近记录: |