我们在 repo 中使用了多个标签标识符。例如。ABC-1.3.5.234 和 DEF-1.2.1.25。describe 命令给了我几乎我想要的东西:
git 描述 --long
ABC-1.3.5.234-33-死牛肉
但我真的很想知道相对于我历史上最新的 DEF 标签的值。有没有办法指定我想使用哪个标签作为计算相对距离的基础?我可以用正则表达式吗?
我们在 repo 中使用了多个标签标识符。例如。ABC-1.3.5.234 和 DEF-1.2.1.25。describe 命令给了我几乎我想要的东西:
git 描述 --long
ABC-1.3.5.234-33-死牛肉
但我真的很想知道相对于我历史上最新的 DEF 标签的值。有没有办法指定我想使用哪个标签作为计算相对距离的基础?我可以用正则表达式吗?
git describe
手册页很清楚:
如果没有找到完全匹配, git describe 将回溯提交历史以找到已标记的祖先提交。祖先的标签将与输入 committish 的 SHA-1 的缩写一起输出。
如果在遍历过程中发现了多个标签,那么与输入 committish 不同的提交最少的标签将被选中并输出。
这里的最少提交不同被定义为将显示的提交git log tag..input
数量将是可能的最小提交数量。
因此,您可能必须编写一个脚本:
git describe
git describe
那个提交n
在该循环期间将找到的标记对象之上的所有附加提交的数量“ ”相加DEF-xxx-n-DEF_SHA1
.自 2013 年以来,如Hendrik的回答所示,这项工作效果更好:
git describe --all --match <tagPattern>
但前提是,正如我在“如何使用 git describe 匹配隐藏的引用”中所述,您使用的是 Git 2.15(2017 年第三季度)。
在 2.15 之前,--all
会被忽略。
注意:Git 2.15 还允许多种模式git describe --match
这允许更高级的搜索,例如:
例如,假设您希望找到包含某个提交的第一个正式发布标签。
如果我们假设官方发布标签的形式是 "v*
" 并且预发布候选*rc*
者的名称中包含 " ",我们现在可以找到引入 commit 的第一个发布标签abcdef
:
git describe --contains --match="v*" --exclude="*rc*" abcd
刚刚偶然发现这个问题。这可能会有所帮助:
git describe --match "DEF-*"
为了我
> git describe --all --match "<tag>"
tags/v0.0.0pre1-334-gbb55666
成功了。
--all
允许搜索所有参考,而不仅仅是标记的参考
--match "<tag>"
指定用于计算距离的标记。