如何在git中搜索标签注释的内容?

How do I search the content of tag annotations in git?

我即将发布我的第一个 git 管理项目的第一个版本,我将使用带注释的标签 ("first alpha release") 对其进行标记。后来,为了找出第一个 alpha 版本,我想在标签注释的内容中搜索 "first alpha"。我该怎么做?

我知道 git log --grep 会搜索提交消息的内容,git show 会告诉我标签注释的内容,但我无法从联机帮助页或 Google 什么命令将搜索标签注释。我是否必须转储存储标签注释的记录并使用其他工具进行搜索?我正在设想 git show $(git tag)|grep "first alpha" 并希望有更好的方法。

您需要在 dereferenced taggit show 来探索带注释的标签“first alpha release”的内容:

git show $(git show-ref -d -s --tags "first tag release"|tail -1| awk '{print }')

也就是说,git 直接显示标签会得到相同的结果,除了首先显示的标签元数据。

git show $(git tag|grep "first alpha")

这将显示标签名称包含"first alpha"的所有标签的内容。

这确实使用了外部 grep 但似乎比解析 git show:

的输出更优雅

git tag -l -n | grep "first alpha"

你会得到非常好的输出: test_1.2.3 first alpha

注意 -n 标志,这里我假设您的注释只有一行。对于较长的消息,您需要在 -n 之后给出一个数字(比如 -n99),并且在 grep 标志方面会更加复杂。 https://www.kernel.org/pub/software/scm/git/docs/git-tag.html

搜索多行注释的一种方法是使用 gawk(显示的示例 bash 命令行):

git tag -l -n99 | gawk -v pat='<some regex>' -- '/^\S/ {tag=} [=10=]~pat { print tag }'

/^\S/ {tag=}依次保存每个标签名,[=17=]~pat { print tag }'找到匹配时打印标签名。