0

我正在尝试为提交添加一个额外的标签,以便以后能够通过模式选择此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

我做错了什么?

4

2 回答 2

0

如果您的意图是获取由 标记的提交的哈希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,但我认为值得一提这个命令。

于 2021-07-15T10:27:09.003 回答
0

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

您的 glob 模式是deployed,并且由于不允许使用通配符,因此此选项唯一允许的标记是它自己。您确实有一个名为 的标签,而您只给了一个,所以这是唯一允许的。--matchdeployeddeployed--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例如,Git 2.15.0 的发行说明指出了这一点。但这不会产生您显示的输出(我认为)。你使用的是什么版本的 Git?


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

于 2021-07-15T09:54:08.657 回答