【问题标题】:List git tag names, dates and messages列出 git 标签名称、日期和消息
【发布时间】:2012-08-26 12:33:08
【问题描述】:

如何列出所有标签的标签名称、标签日期和标签消息?

似乎 git 通过git log 将提交的显示逻辑和通过git tag 标记的显示逻辑分开,使得很难列出标记名称、标记的日期和标记消息。

我可以使用git log --tags --show-notes --simplify-by-decoration --pretty="format:%ai %d %s"显示标签日期、名称和提交消息

我检查了http://opensource.apple.com/source/Git/Git-26/src/git-htmldocs/pretty-formats.txt,但没有看到任何显示标签消息的选项。

我可以使用git tag -n5显示标签名称和5行标签信息

但是要获得所有这三个信息似乎需要超出我能力范围的粗糙脚本。

【问题讨论】:

    标签: git git-log git-tag


    【解决方案1】:

    颜色更好一点的格式怎么样?

    # ~/.gitconfig
    [alias]
    tags="for-each-ref --sort=taggerdate --format='%(color:green)%(subject)%(color:reset), tagged: %(refname:short)\n%(taggerdate)\n%(taggername) %(taggeremail)\n\n%(contents:body)\n' refs/tags"
    

    $ git tags 
    
    Release 1.0.1, tagged: 1.0.1
    Wed Jul 4 20:16:05 2018 +0430
    Sepehr Lajevardi <sepehr.lajevardi@...>
    
    Changelog
    - Implement Contentful webhooks to purge internal and CF caches.
    - Implement CloudFlareService.
    - Fix Contentful's mapping concern usage/namespace. #73
    - Temporarily enforce https in og:url property. #103
    - Fix entry callback issue with Contentful client. #99
    - Fix issue with PPM docker build. #96
    
    Release 1.1.2, tagged: 1.1.2
    Thu Jul 12 21:26:29 2018 +0430
    Sepehr Lajevardi <sepehr.lajevardi@...>
    
    Changelog
    - Fix GA share event issue with AddThis. #132
    - Optimize OpenGraph protocol tags for articles. #130
    - Optimize Twitter card tags. #131
    - Fix HTML validation errors as much as possible. #127
    
    
    Release 1.1.3, tagged: 1.1.3
    Mon Jul 16 22:49:05 2018 +0430
    Sepehr Lajevardi <sepehr.lajevardi@...>
    
    Changelog
    - Implement cross-device/browser fav/home icons. #137, #138
    - Minify HTML output of all pages. #139
    - Check for lighthouse score in build pipeline. #30
    - Drop AddThis in favor of in-house ShareBar. #116
    - Minor article OG tag adjustments.
    

    【讨论】:

    • 您的别名中缺少开头的 '
    【解决方案2】:

    git tag --format="%(refname:short) %(authordate) %(authorname) %(subject)"

    示例输出

    0.4.0 2016 年 11 月 2 日星期三 11:17:50 -0400 船长明显发布:0.4.0

    格式字段与git-for-each-ref 相同。

    【讨论】:

      【解决方案3】:

      在你的仓库中使用这个终端命令

      git show --tags --no-patch
      

      您可以使用与git log 相同的--format= 名称选项(单行、短、中、完整、自定义)来控制格式。

      git show --tags --no-patch --format=short
      

      【讨论】:

        【解决方案4】:

        如果您想获取最新的标签详细信息,请使用--sort 标志,请记住,如果您是按日期排序,请在日期前使用“-”以首先列出最新的。

        例如,我想要最新的标签描述(因为它恰好是最新的版本名称),我使用 --format 来拉出标签的主题并按照 taggerdate 方式对其进行排序(最新的优先)。这是执行此操作的命令。

        git for-each-ref --sort=-taggerdate --format '%(subject)' refs/tags --count=1

        【讨论】:

          【解决方案5】:

          您想使用for-each-ref 命令。不幸的是,它的用户友好性只比filter-branch差一点点

          请注意,标签日期和标注器等信息仅适用于带注释的标签。

          下面是一个基本原型。请注意, format= 可以是它自己的整个 shell 脚本,并且可能应该取决于您想要输出的复杂程度。他们有几个专门针对标签in the for-each-ref documentation

          的示例
          git for-each-ref --format="%(refname:short) %(taggerdate) %(subject) %(body)" refs/tags
          

          【讨论】:

          • 使用通过 Github Releases 创建的带有自动生成的标签名称的标签,这将显示来自相关提交的提交消息,而不是来自输入到 GUI 中的标签的消息。这表明 Github 没有使用 git tag -a 而是使用其他方法?
          • 这听起来像是一个没有注释的标签。那些只是存储一个指向 SHA 的指针。
          • 似乎不支持 git-log 格式选项,例如用于表格输出的 %
          【解决方案6】:

          这是Andrew's 回复的后续问题,略有不同但相关主题。

          git for-each-ref --format="%(refname:short) %(taggerdate) %(subject) %(body)" refs/tags

          这在直接命令行上效果很好。当我在 ~/.gitconfig 中设置一个 git 别名时,它似乎没有喷出相同的输出。

          当直接在命令行上调用时,我明白了。

          package-release-14.7.2 Wed Dec 3 14:24:38 2014 -0800 14.7.2:复制标签 package-release-14.7.2
          package-release-14.7.3 Thu Dec 4 14:14:55 2014 -0800 14.7.3:复制标签 package-release-14.7.3
          package-release-14.7.4 Fri Dec 5 16:16:40 2014 -0800 14.7.4:复制标签 package-release-14.7.4

          当我调用 git 别名(taghist = for-each-ref --format="%(refname:short) %(taggerdate) %(subject) %(body)" refs/tags)时,我得到

          package-release-14.7.2
          包发布-14.7.3
          包发布-14.7.4

          -桑

          【讨论】:

          • 使用 \" 而不是 ",然后编辑它以提供如何在别名中执行此操作的答案,否则它不是答案
          • taghist = for-each-ref --format=\"%(refname:short) %(taggerdate) %(subject) %(body)\" refs/tags
          【解决方案7】:

          不知道有没有办法

          列出所有标签的标签名称、标签日期和标签消息 只使用 git 语法

          但是一个简单的 grep 就可以完成这项工作:

          git show --tags |grep "^tag " -A4

          请注意,我在匹配后指定了 4 行尾随上下文,因为标准输出在单独的行中显示标签名称、标签日期和标签消息。

          如果您需要处理多行标记消息,我更喜欢使用管道连接到 awk,这会稍微麻烦一些:

          git show --tags |awk "/^tag /,/-----BEGIN PGP SIGNATURE-----|commit /" |egrep -v "^$" |sed -E "s/^-----BEGIN PGP SIGNATURE-----.*|^commit.*/-/"

          只要标签消息后面跟着 PGP 签名或提交消息,这将起作用,afaik 都是可能的情况。但是,您可以轻松地调整最后一个 grep 以涵盖其他情况(如果有的话)。

          【讨论】:

          • 我使用 Github Releases 功能使用其自动创建的标记名(提交 sha)创建了我的标记。在那个 repo 上,上面的命令不起作用,我没有从 grep 得到任何输出,并且从 git show --tags 得到大量无用的输出。不过谢谢你的想法!
          【解决方案8】:

          git show --tags 至少会输出有关您的标签的所有相关信息。您或许可以从那里找到合适的--pretty=format: 序列。

          【讨论】:

          • git show --tags 的表达方式看起来非常复杂,顺便说一句,它似乎没有适合问题作者需要的格式。
          • @MichałPolitowski 是的。 git show --tags 会做同样的事情。相应地编辑答案。
          猜你喜欢
          • 2019-11-12
          • 1970-01-01
          • 2017-12-30
          • 2017-05-30
          • 1970-01-01
          • 2011-07-18
          • 2014-01-11
          • 2019-10-25
          相关资源
          最近更新 更多