在Git中获取最新标签的最简单方法是什么?

git tag a HEAD
git tag b HEAD^^
git tag c HEAD^
git tag

输出:

a
b
c

我应该写一个脚本来获得每个标记的日期时间并比较它们吗?


当前回答

在CI/CD进程中描述的问题是,您可能会遇到致命的问题:没有标签可以描述错误。

这将会发生,因为,per git describe——help:

该命令查找可从提交中访问的最新标记。

如果你想要repo中最新的标签,不管你所在的分支是否可以到达这个标签,通常是因为它不是当前分支树的一部分,这个命令会给你整个repo中最近创建的标签:

git tag -l --sort=-creatordate | head -n 1

其他回答

如果你的标签是可排序的:

git tag --merged $YOUR_BRANCH_NAME | grep "prefix/" | sort | tail -n 1

我的第一个想法是你可以使用git rev-list HEAD,它以倒序的顺序列出所有的转速,并结合git标签-contains。当你找到一个引用,其中git tag——contains生成了一个非空列表,你已经找到了最新的标签。

要获得最新的标签(后面的示例输出):

git describe --tags --abbrev=0   # 0.1.0-dev

要获得最近的标签,以及被标记对象顶部的额外提交数&更多:

git describe --tags              # 0.1.0-dev-93-g1416689

要获取最近的带注释的标签:

git describe --abbrev=0

这个怎么样?

git描述$(git rev-list——tags——max-count=1))

从技术上讲,不一定会得到最新的标签,但会得到标记的最新提交,这可能是你要找的东西,也可能不是。

git log --tags --no-walk --pretty="format:%d" | sed 2q | sed 's/[()]//g' | sed s/,[^,]*$// | sed  's ......  '

如果你还需要更多的标签

(git描述-标签有时会给出错误的哈希值,我不知道为什么,但对我来说-max-count 2不工作)

这就是你如何按时间顺序获得最新2个标签名称的列表,在git 1.8.4上完美工作。 对于早期版本的git(如1.7.*),输出中没有“tag:”字符串——只是删除最后一次sed调用

如果你想要两个以上的最新标签-将这个“sed 2q”改为“sed 5q”或任何你需要的

然后,您可以轻松地将每个标记名称解析为变量。