获取当前提交的最新git标签

5

我正在尝试从我的代码树的特定点获取最新的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标签。

当在 739392e 上使用 git describe --tags 命令时,只返回该提交所绑定的第一个标签 0.1262,因此我无法获得所有的候选标签。

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


你尝试过这个吗:git log -1 --format=%TAG_NAME - Akhter Al Amin
“-format=%TAG_NAME” 是什么意思?这些是可用的占位符:https://git-scm.com/docs/pretty-formats - Rotemmiz
git describe --tags 给出了其中一个候选项。列出所有标签,测试每个标签是否指向该候选项。 - ElpieKay
2个回答

1
如果您可以按名称对标签进行排序(这似乎是合理的?),则可以使用以下命令: git tag --points-at HEAD --sort -version:refname | head -1
如果不是,请首先检查提交者日期或作者日期是否设置在您的标签上: 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 -1git help tag中得到:

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

并从git help for-each-ref中得到:
对于提交和标签对象,特殊的 creatordate 和 creator 字段将对应于来自提交者或标记者字段的适当日期或名称-电子邮件-日期元组,具体取决于对象类型。这些旨在用于混合注释和轻量级标签的处理。

0

您可以使用git tag子命令,并将其与指向您正在检查的特定提交的列表选项一起使用:

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

如果您使用的是 Git 2.0 或更高版本,则它具有一个 --sort 选项,可以让您按标签日期顺序进行降序排序结果。

请注意,排序仅适用于已注释的标签(轻量级标签没有自己单独的日期)。如果没有标签日期,则没有明显的正确顺序。快速问一下,哪个更新,tag: CODE-NIGHTMARE-GREEN 还是 tag: CODE-GOD-GAME-BLACK? :-) - torek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接