【问题标题】:git describe --match returns wrong tag name if commit has two tags如果提交有两个标签,git describe --match 返回错误的标签名称
【发布时间】:2021-09-24 03:03:58
【问题描述】:

我正在尝试为提交添加一个额外的标签,以便以后能够通过git describe 使用--match 模式选择此提交;

当我使用--match 用一个标签捕获通常的提交时,一切正常。

但是当我尝试通过模式“部署”将提交与两个标签匹配时,我得到了非常奇怪的标签,例如:

我已提交:b946bdf (tag: a@0.0.1) Publish

我添加“已部署”标签:b946bdf (tag: a@0.0.1, tag: deployed) Publish

然后我运行git describe --abbrev=0 --match "deployed"

而这条命令的结果是a@0.0.1-9-g1e5c94cc55fded72114b801bd47d8d29e7721255

如果我尝试使用--abbrev=1,我会得到a@0.0.1-9-g1e5c9

最有趣的是-9-g1e5c94cc55fded72114b801bd47d8d29e7721255 甚至不是这个提交的一个。我不知道为什么以及从哪里得到这个奇怪的标识符。

我想要一个干净的标签,比如a@0.0.1

我做错了什么?

【问题讨论】:

  • 你的 git 版本是什么?你能更新到最新的“2.32”版本吗?

标签: git git-tag git-describe


【解决方案1】:

git describe--match 选项采用 shell 样式的全局模式,例如 a*z。然后它通过 shell 样式的匹配器运行git tags 列出的标签。1 因此,给定 glob 模式 a*z,名为 abuzzaveloz 的标签将匹配,但标签命名为arbiterfuzz 不会。

您的 glob 模式是 deployed,并且由于不允许使用通配符,因此 --match 选项唯一的 允许 标记是 deployed 本身。你确实有一个名为deployed的标签,而你只给了一个--match,所以这是唯一允许的。

如果我创建这样一个标签,我可以使用它:

$ git tag -a deployed -m silly
$ git describe --abbrev=0 --match deployed
deployed

这个标签当然不能用于任何早期的版本:

$ git describe --abbrev=0 --match deployed HEAD~
fatal: No tags can describe '98f3f03bcbf4e0eda498f0a0c01d9bd90de9e106'.
Try --always, or create some tags.

删除标签会产生相应的错误:

$ git tag -d deployed
Deleted tag 'deployed' (was a464a376ca)
$ git describe --abbrev=0 --match deployed 
fatal: No names found, cannot describe anything.

我无法解释你的输出。 git describe 中出现过bug; the release notes for Git 2.15.0 point one out,例如。但这不会产生您显示的输出(我认为)。你用的是什么版本的 Git?


1这实际上全部内置于git describe 本身,它不必运行git tags。不过效果是一样的。请注意,shell glob 模式可能需要引用以保护它们免受 shell 的影响,具体取决于您的 shell。

【讨论】:

    【解决方案2】:

    如果您的意图是获取由deployed 标记的提交的哈希,只需使用git rev-parse

    # works for any type of tag :
    git rev-parse deployed^{}
    
    # works if 'deployed' is a plain tag :
    git rev-parse deployed
    

    如果deployed 是一个带注释的标签,git rev-parse deployed(没有^{})会给你标签对象本身的哈希,而不是被标记的提交的哈希。


    这并不能解释你从 git describe 得到的奇怪输出,但我认为值得一提这个命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      • 2023-02-09
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多