В git перечислите все теги, так как некоторые теги

Я использую теги для определения версий релиза и для определения коммитов "разработка завершена" для задач. Делать 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

3 ответа

Решение

git tag --contains v0.1.1 покажет вам все теги, которые содержат данный тег - т.е. теги, по которым вы можете проследить историю и достичь данного тега.

Вы можете предоставить диапазон для git log:

git log v1.1.0..

Теперь вы добавляете --decorate опция, которая будет перечислять теги. Существуют и другие параметры, которые вы можете добавить в журнал, чтобы ограничить список только интересными или использовать его в качестве тега:

git log v1.1.0.. --decorate | grep 'tag:'

Ты можешь использовать 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 само по себе), но это должно стать началом получения списка, который вам необходим.

Другие вопросы по тегам