2

我们在 repo 中使用了多个标签标识符。例如。ABC-1.3.5.234 和 DEF-1.2.1.25。describe 命令给了我几乎我想要的东西:

git 描述 --long

ABC-1.3.5.234-33-死牛肉

但我真的很想知道相对于我历史上最新的 DEF 标签的值。有没有办法指定我想使用哪个标签作为计算相对距离的基础?我可以用正则表达式吗?

4

3 回答 3

2

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
于 2013-06-12T07:13:29.510 回答
1

刚刚偶然发现这个问题。这可能会有所帮助:

git describe --match "DEF-*"
于 2020-07-13T06:22:24.437 回答
1

为了我

> git describe --all --match "<tag>"

tags/v0.0.0pre1-334-gbb55666

成功了。

--all允许搜索所有参考,而不仅仅是标记的参考 --match "<tag>"指定用于计算距离的标记。

于 2020-07-22T12:54:27.477 回答