我输入git tag并列出了我当前的标签:
1.2.3
1.2.4
如何确定其中哪些是带注释的,哪些是轻量的?
Answers:
git for-each-ref告诉您默认情况下每个引用的含义,编号和类型。要将其限制为仅标记,请执行git for-each-ref refs/tags。
输出具有三个字段:对象的哈希,对象的类型以及引用对象的引用/标记中的名称。所谓的“轻量级”标记是引用/标记中引用
commit对象的名称。“带注释的”标记是引用/标记中引用tag对象的名称。-所罗门慢(在评论)
这是一个例子:
git for-each-ref refs/tags
902fa933e4a9d018574cbb7b5783a130338b47b8 commit refs/tags/v1.0-light
1f486472ccac3250c19235d843d196a3a7fbd78b tag refs/tags/v1.1-annot
fd3cf147ac6b0bb9da13ae2fb2b73122b919a036 commit refs/tags/v1.2-light
commit轻便又带tag注释?
commit对象的名称。“带注释的”标记是引用/标记中引用tag对象的名称。
该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”是带注释的)。
请尝试使用 git describe
https://git-scm.com/docs/git-describe
默认情况下(不带--all或--tags),git describe仅显示带注释的标签。
git tag -n为你做些什么?