问题描述
我正在尝试为提交添加一个额外的标记,以便稍后能够通过 git describe
使用 --match
模式选择此提交;
当我使用 --match
用一个标签捕获通常的提交时,一切正常。
但是当我尝试通过模式“deployed”将提交与两个标签匹配时,我得到了非常奇怪的标签,例如:
我已提交: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
甚至不是这个提交的一个。我不知道为什么以及从哪里得到这个奇怪的标识符。
我做错了什么?
解决方法
[K in keyof T]: T[K] extends Thing ? ... : ...
的 --match
选项采用 shell 样式的 glob 模式,例如 git describe
。然后它通过 shell 样式的匹配器运行 a*z
列出的标签。1 因此,给定全局模式 git tags
,标签名为 a*z
和 {{1 }} 会匹配,但名为 abuzz
或 aveloz
的标签不会。
您的 glob 模式是 arbiter
,并且由于不允许使用通配符,因此此 fuzz
选项唯一的 允许 标记是 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.
中存在错误; the release notes for Git 2.15.0 point one out,例如。但这不会产生您显示的输出(我认为)。您使用的是哪个版本的 Git?
1这实际上都内置于 $ git tag -d deployed
Deleted tag 'deployed' (was a464a376ca)
$ git describe --abbrev=0 --match deployed
fatal: No names found,cannot describe anything.
本身,它不必运行 git describe
。不过效果是一样的。请注意,根据您的 shell,shell glob 模式可能需要引用以保护它们免受 shell 的影响。
如果您的目的是获取由 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
得到的奇怪输出,但我认为值得一提的是这个命令。