【问题标题】:How do I search the content of tag annotations in git?如何在git中搜索标签注释的内容?
【发布时间】:2015-07-22 14:03:51
【问题描述】:

我即将发布我的第一个 git 管理项目的第一个版本,并将使用带注释的标签(“第一个 alpha 版本”)对其进行标记。稍后,要找出哪个是第一个 alpha 版本,我想在标签注释的内容中搜索“第一个 alpha”。我该怎么做?

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

【问题讨论】:

    标签: git version-control tags full-text-search release-management


    【解决方案1】:

    这确实使用了外部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 }' 找到匹配时打印标签名称。

    【讨论】:

    • 隐藏在众目睽睽之下!谢谢 --- 我忽略了 -n 选项。我从测试中看到多行注释是缩进的,这使得处理它们更容易。我将冒昧地编辑您的答案,以包括我刚才写的 gawk oneliner 以完成解决方案。
    • 一个方便的 shell 脚本现在在 GitHub.
    【解决方案2】:

    您需要dereferenced tag 上的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")
    

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

    【讨论】:

    • 感谢git show-ref 的提示——我以前没用过。点赞!这个答案似乎适用于标签名称,但不适用于标签注释的内容(除非我遗漏了什么),因为patterns are matched in the ref names。取消引用一直到标记的提交,因此$(...) 提供提交哈希而不是标记对象哈希。感谢您花时间回答这个问题!
    猜你喜欢
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    相关资源
    最近更新 更多