我需要Git命令到获取/查找最后一个标签'v'获得最后版本提交(我在开始时使用v字母标记标记下一个应用程序版本(例如:v0.9.1beta)如何获得最后一个Git标签匹配正则表达式标准
有没有办法做到这一点
我需要Git命令到获取/查找最后一个标签'v'获得最后版本提交(我在开始时使用v字母标记标记下一个应用程序版本(例如:v0.9.1beta)如何获得最后一个Git标签匹配正则表达式标准
有没有办法做到这一点
我使用下面的命令为这个:?
git describe --match "v[0-9]*" --abbrev=4 HEAD
如果自上次版本化标记以来您对源代码树执行了某些操作,它也将修改版本。
请注意,这是而不是正则表达式,但一个glob,但适用于提供的示例。
如果您只想使用“--abbrev = 0”的标签,使用“short output”。 – 2013-08-17 02:11:44
['git describe' doc](https://git-scm.com/docs/git-describe)表示'--match'采用了glob,而不是正则表达式。 – 2016-10-28 04:51:49
@CraigMcQueen是一个glob,这就是为什么它工作并过滤掉'v1.0.0'而不是'v1234'。我添加了一个注释来澄清这一点。 – 2016-10-28 07:36:36
git tag -l -n v*
它列出了所有标签匹配条件。我只需要最后一个,所以git描述--match v *。无论如何感谢提示标签和描述命令链接在一起的git手册页。 – Lukasz 2010-10-05 21:17:47
git describe --match v*
使用此。
这将包括所有以'v'开头的标签,所以它会列出所有字不只是版本 – 2010-10-05 21:21:24
是的......这是真的。无论如何,我标记你的正则表达式是解决我的问题。我应该删除这个答案吗? – Lukasz 2010-10-06 00:21:52
感谢您的接受!不,我认为不需要删除这个答案。 – 2010-10-06 08:42:33
我使用
git tag -l --format "%(objecttype) %(refname:short)" --sort=-version:refname --merged HEAD "v*"
git tag
解释图案作为水珠。所以你不能指定一个完整的正则表达式。只需使用最小glob(v *)甚至不使用glob。您将以排序顺序(最高标记版本优先)获得多于一个匹配标记,然后您将能够将输出与之后的表达式进行正则表达式匹配。
KARASZI István's answer已经解释了如何找到与glob匹配的标签,这通常足够好。如果你曾经需要虽然是真正的正则表达式:
for tag in $(git tag | grep YOURREGEX); do
git describe --tags --long --match="$tag" 2>/dev/null
done | sort -k2 -t"-" | head -n1
--abrev=0
将实现),追加| cut -d"-" -f1
--long
的行为也输出,确切地说匹配标签包括-0-hash
部分,而是附加| sed -e's/-0-.*$//'
。问题的示例标签可能会使用正则表达式^v\d+\.\d+\.\d+\D*$
(尽管\D*$
可能是可选的)。
...虽然这在性能方面明显更差,因为'git describe'是为匹配RegEx的_each_标签运行的。 – 2017-02-09 08:22:33
感谢这:) – 2017-02-27 18:42:38
虽然单个正则表达式--match "v[0-9]*"
就够这里,知道了Git 2.13(Q2 2017)将改善是:
“
git describe
”和“git name-rev
”已经被教导要花费超过一个refname模式限制这组参考文件将其 命名输出作为基础,并且还学会了将 的负模式用于名称,因为名称不适用于通过它们的“--exclude
”选项进行命名。
通过Jacob Keller (jacob-keller
)参见commit 77d21f2,commit 43f8080,commit 96415b4,commit 290be66,commit 4a68748(2017年1月18日)。
(在commit 1b32498由Junio C Hamano -- gitster
--合并,2017年2月27日)
你现在可以有multiple match pattern:
--match <pattern>:
只考虑标签匹配给定
glob(7)
模式,不包括“裁判/标签/ “ 字首。
这可以用来避免从存储库泄漏专用标签。如果给定多次,模式列表将被累积,并且将考虑匹配任何模式的标签。
使用--no-match
清除并重置模式列表。
而且你还有一个exclude pattern (or several) now!
--exclude <pattern>::
不考虑标签匹配给定
glob(7)
模式,不包括 的 “裁判/标签/” 前缀。这可用于缩小标签空间并仅查找符合某些有意义标准的标签。
如果给定多次,模式列表将被累计,并且匹配任何模式的标签将被排除。
当与--match
结合使用时,当至少匹配一个--match
图案并且不匹配任何--exclude
图案时,将会考虑标签。使用--no-exclude
清除并重置模式列表。
使用git describe
为其他答案的问题做是git describe
会告诉你,是从头部到达标签(或提交指定。)
想象一下,你有3个标签,V1,V2,和v3。如果HEAD位于v2和v3之间,则git describe
将返回v2而不是v3。
如果您确实需要最新的标签,首先您需要带注释的标签,因为轻量级标签没有日期元数据。
然后,此命令将做到这一点:
git for-each-ref --sort=-taggerdate --count=1 refs/tags/v*
可你只需要使用'混帐describe'? – Daenyth 2010-10-05 21:07:01
是的.. git describe --match v *是我需要的。谢谢。 – Lukasz 2010-10-05 21:16:05
有人可以编辑标题,因为这是不需要真正使用正则表达式。所有的答案都只是使用匹配和“glob”模式。谢谢。 – d4Rk 2014-11-28 13:57:05