从当前提交中获取最新的git标记

时间:2016-12-07 10:13:54

标签: git git-tag

我正试图从我树中的某个点获取最新的git标签。

树看起来如下:

* 334322c|2016-12-06| (tag: 0.1265, tag: 0.1264) (18 hours ago)
* 739392e|2016-12-06| (HEAD -> testbranch, tag: 0.1263, tag: 0.1262) (19 hours ago)
* 8ec1add|2016-12-06| (tag: 0.1261, tag: 0.1260, tag: 0.1259) (20 hours ago)
* 5b2667b|2016-12-06| (tag: 0.1258) (21 hours ago)
* c7ff4bc|2016-12-06| (tag: 0.1257, tag: 0.1256) (22 hours ago)

0.1263是我要找的git标签。

使用739392egit describe --tags只返回0.1262,这是该提交的第一个标记,而我没有得到所有候选人。

739392e使用git describe --tags $(git rev-list --tags --max-count=1)返回0.1265时,树上的最新标记(无论HEAD位于何处)。

2 个答案:

答案 0 :(得分:0)

您可以使用git tag sub-command,并将list选项指向您正在检查的特定提交:

git tag -l --points-at <commit|object>

如果您使用的是git 2.0或更高版本,则它有一个--sort选项,允许您按标记日期顺序对结果进行排序,降序。

答案 1 :(得分:0)

如果您可以按名称对标签进行排序(这看起来合理吗?),则可以使用以下命令:

git tag --points-at HEAD --sort -version:refname | head -1

如果不首先检查是否在标签上设置了committerdate或authordate:

git tag --points-at HEAD --format='%(*committerdate:iso) %(*authordate:iso) %(refname) %(*objectname) %(objectname)'

这将输出如下内容:

2018-05-28 09:58:06 +0200 2018-05-28 09:58:06 +0200 refs/tags/3.11.47 55a4f6de2b1466d1a2ee60acc53aa12fd5ad07b3 914ac376102a6c7f189453fbcd8737db32b90693
2018-05-28 09:58:06 +0200 2018-05-28 09:58:06 +0200 refs/tags/3.11.46 55a4f6de2b1466d1a2ee60acc53aa12fd5ad07b3 e0d37427b89fbd6c3baa898a1264a9ba3e3ff7f

从该示例中可以看到,两个标签的committerdate和authordate相同,这意味着我们无法对这些字段进行排序。但是,如果设置正确,则可以使用以下命令:

git tag --points-at HEAD --sort -version:creatordate | head -1

来自git help tag

  

--sort=<key>              根据给定的键排序。 前缀-以值的降序排列。您可以多次使用--sort=<key>选项,在这种情况下              最后一个键成为主键。还支持“版本:refname”或“ v:refname”(标记名称被视为版本)。 “版本:refname”排序              顺序也可能受“ versionsort.suffix”配置变量影响。 支持的键与git for-each-ref 中的键相同。分类              order默认为为tag.sort变量配置的值(如果存在),否则为字典顺序。参见git-config(1)。

并且来自git help for-each-ref

  

对于提交和标记对象,特殊的 creatordate 和创建者字段将对应于来自提交者或标记者字段的适当日期或名称-电子邮件日期元组,具体取决于对象类型。这些旨在用于带注释的标签和轻量级标签的混合使用。