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

4
我即将发布我第一个使用git进行管理的项目的第一版,并打上一个带注释的标签("first alpha release")。稍后,为了找出哪个是第一个alpha版本,我想搜索标签注释的内容以查看是否包含"first alpha"。 我该怎么做?
我知道git log --grep可以搜索提交信息的内容,git show可以显示标签注释的内容,但我无法从man页或Google中找到哪个命令可以在标签注释上进行搜索。我需要转储存储标签注释的记录并使用另一个工具进行搜索吗?我设想git show $(git tag)|grep "first alpha"并希望有更好的方法。
2个回答

5

这里使用了外部的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=$1} $0~pat { print tag }'

/^\S/ {tag=$1} 会依次保存每个标签名称,$0~pat { print tag } 会在匹配成功时打印出标签名称。


1
藏在明处!谢谢 - 我忽略了-n选项。从测试中我看到多行注释是缩进的,这使得处理它们更容易。我将编辑您的答案,包括我刚刚编写的gawk单行程序来完成解决方案。 - cxw
一个方便的Shell脚本现在可以在GitHub上找到。 - cxw

3
您需要在已解引用的标签上使用git show来探索带注释的标签"first alpha release"的内容:(参考此链接)
git show $(git show-ref -d -s --tags "first tag release"|tail -1| awk '{print $1}')

话虽如此,直接使用标签的git show将给出相同的结果,除了首先显示标签元数据。

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

这将显示所有标签内容,其中标签名称包含“第一个字母”。


谢谢您关于git show-ref的提示,我以前没有使用过。点赞!这个答案似乎对标签名称很有效,但不适用于标签注释的内容(除非我漏掉了什么),因为模式匹配在引用名称中进行。解引用一直到标记的提交,所以$(...)给出的是提交哈希而不是标记对象哈希。感谢您在这个答案上花费的时间! - cxw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接