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