2016-11-08 73 views

回答

10

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

+0

完美,谢谢! –

+1

当我尝试这个时,[输出](http://imgur.com/b00mvjr)列出每个标签为'commit'或'tag'。我认为那些分别指示轻量级和注释标签? –

+1

@StevenVascellaro这是正确的,一个轻量级的标签只是当地的裁判开始“裁判/标签”,它可以是任何东西。对象db中的标签不仅仅是一个名称,而且可以像任何其他对象一样运输。 Git的使得当地的裁判在对象数据库中的每个标签,因此区别是有些模糊,一般没有人去关心太多,一旦工作流设置为自己的项目。 – jthill

5

获取标记名称(例如foo),然后执行git cat-file -t foo。如果它是一个带注释的标签,cat-file会告诉你这是一个“标签”。如果它是一个简单的标签,cat-file会告诉你,这是一个“提交”。

更新:由于矛盾在他的评论中说,git show作品太多,但它给你比它只是什么样的标签的更多信息。

14

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

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

这输出可以比用unix的排序,sed的,切按摩和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”被注释)。

相关问题