33

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

似乎 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但没有看到任何显示标签消息的选项。

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

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

4

8 回答 8

28

您想使用该for-each-ref命令。不幸的是,它的用户友好性仅略低于filter-branch

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

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

git for-each-ref --format="%(refname:short) %(taggerdate) %(subject) %(body)" refs/tags
于 2014-10-25T14:21:16.480 回答
6

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

于 2012-09-01T01:15:47.707 回答
3

更好的彩色格式怎么样?

# ~/.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.
于 2018-07-17T05:48:33.900 回答
2

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

示例输出

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

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

于 2020-08-07T10:55:01.683 回答
1

不知道有没有办法

使用 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 签名或提交消息,这将起作用,这都是可能的情况。但是,您可以轻松地调整最后一个 grep 以涵盖其他情况(如果有的话)。

于 2014-10-25T13:45:12.950 回答
0

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

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

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

于 2020-03-10T13:19:23.870 回答
0

在您的存储库中使用此终端命令

git show --tags --no-patch

您可以--format=使用与git log.

git show --tags --no-patch --format=short
于 2020-07-20T02:20:19.000 回答
-2

这是安德鲁回答的后续问题,略有不同但相关的主题。

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 alias(taghist = for-each-ref --format="%(refname:short) %(taggerdate) %(subject) %(body)" refs/tags) 时,我得到

包发布-14.7.2

发布-14.7.3 包发布-14.7.4

-桑

于 2014-12-10T07:11:54.337 回答