我正试图从我树中的某个点获取最新的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位于何处)。
答案 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 和创建者字段将对应于来自提交者或标记者字段的适当日期或名称-电子邮件日期元组,具体取决于对象类型。这些旨在用于带注释的标签和轻量级标签的混合使用。