7

我正在使用标签来识别发布版本并识别任务的“开发完成”提交。做一个git tag我得到一个如下的列表。

> git tag
v0.1.0
task_1768
task_2011
task_1790
task_1341
v0.1.1
task_2043
task_2311
v0.1.2

假设所有标签都指向master分支上的提交,有没有办法列出自某个标签以来的所有标签?例如,要生成包含在v0.1.2发布中的所有任务的列表——我正在寻找类似以下的内容(这不是实际命令)。

> git tag -l "task_*" --since v0.1.1

获得如下输出。

task_2043
task_2311

有没有办法做到这一点git tag

有没有办法做到这一点git rev-list

(或者其他一些 git 命令?)

更新

根据答案和评论,以下是我目前正在使用的。

> git log v0.1.1.. --decorate | grep -Eow 'tag: ([a-zA-Z0-9.-_]*)' | awk '{ print substr($0, 6); }'
task_2043
task_2311
v0.1.2

> git log v0.1.1.. --decorate | grep -Eow 'tag: ([a-zA-Z0-9.-_]*)' | awk '{ print substr($0, 6); }' | grep -Eo 'task_.*'
task_2043
task_2311

第二次更新

新选择的答案。这正是我最初想要的。优雅得多。

> git tag --contains v0.1.1
v0.1.1
task_2043
task_2311
v0.1.2

> git tag --contains v0.1.1 | grep -Eo 'task_.*'
task_2043
task_2311
4

3 回答 3

10

git tag --contains v0.1.1将向您显示包含给定标签的所有标签 - 即您可以从中追溯历史并到达给定标签的标签。

于 2013-01-13T02:50:17.053 回答
4

您可以提供一个范围git log

git log v1.1.0..

现在您添加--decorate将列出标签的选项。您可以将其他选项添加到日志中以将列表限制为仅有趣的列表,或者将其 grep 用于“标记”:

git log v1.1.0.. --decorate | grep 'tag:'
于 2013-01-10T00:17:10.153 回答
2

您可以使用git rev-list以下链接为您提供所有可访问的修订master,不包括也可以从以下链接访问的任何修订v0.1.1

git rev-list --tags master --not v0.1.1

然后,您可以通过以下方式运行它git describe

git describe --abbrev=0 --tags `git rev-list --tags master --not v0.1.1`

这可能会为您提供标签的重复副本(并且可能会包括v0.1.1其自身),但这应该是获取所需列表的开始。

于 2013-01-10T00:25:40.417 回答