如何判断给定的git标签是注释还是轻量级?

时间:2016-11-08 05:36:30

标签: git

我输入room_id date_reservartion 101 October, 01 2016 101 October, 03 2016 102 October, 02 2016 102 October, 05 2016 103 October, 01 2016 103 October, 02 2016 103 October, 04 2016 104 October, 04 2016 并列出我当前的标签:

git tag

如何确定哪些是注释的,哪些是轻量级的?

4 个答案:

答案 0 :(得分:36)

git for-each-ref告诉你默认情况下每个ref是什么,它的id和类型。要将其限制为仅标记,请执行git for-each-ref refs/tags

答案 1 :(得分:30)

git show-ref -d --tags命令排序,因为轻量级标记在输出中出现一次,带注释的标记出现两次。此外,只有带注释的标签在输出中包含“^ {}”解除引用运算符。

588e9261795ec6dda4bd0a881cf1a86848e3d975 refs/tags/1.2.3
7fe2caaed1b02bb6dae0305c5c0f2592e7080a7a refs/tags/1.2.4
588e9261795ec6dda4bd0a881cf1a86848e3d975 refs/tags/1.2.4^{}

然后可以使用unix sort,sed,cut和uniq命令对输出进行按摩,以使输出更具可读性:

git show-ref -d --tags       | 
cut -b 42-                   | # to remove the commit-id
sort                         |
sed 's/\^{}//'               | # remove ^{} markings
uniq -c                      | # count identical lines
sed 's/2\ refs\/tags\// a /' | # 2 identicals = annotated
sed 's/1\ refs\/tags\//lw /'   

对于我的原始回购(来自我的问题),它输出:

  lw 1.2.3
   a 1.2.4

(例如,1.2.3为“轻量级”,“1.2.4”为注释)。

答案 2 :(得分:14)

获取代码名称(例如git cat-file -t foo),然后执行cat-file。如果它是带注释的标记,cat-file会告诉您它是"标记"。如果它是一个简单的标记,git show会告诉您它是"提交"。

更新:正如矛盾在他的评论中所说,models.py也有效,但它提供的信息不仅仅是它的标签类型。

答案 3 :(得分:10)

请尝试使用git describe

https://git-scm.com/docs/git-describe

  

默认情况下(不使用--all或--tags)git describe仅显示带注释的标签。