列出 git 标签名称、日期和消息
Posted
技术标签:
【中文标题】列出 git 标签名称、日期和消息【英文标题】:List git tag names, dates and messages 【发布时间】: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行标签信息。
但是要获得所有这三个信息似乎需要超出我能力范围的粗糙脚本。
【问题讨论】:
【参考方案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
会做同样的事情。相应地编辑答案。以上是关于列出 git 标签名称、日期和消息的主要内容,如果未能解决你的问题,请参考以下文章