Для випусків я зазвичай позначаю щось на зразок v1.1.0. Під час мого сценарію збірки я створюю файл fwVersion.c, який містить поточну інформацію про git. Наразі у файлі є інформація про коміти та гілки, але я хотів би додати тег.
Чи можливо це?
Відповіді:
Перевірте документацію для git describe. Він знаходить найближчий тег до даного коміту (тобто тег, який вказує на предка коміту) і описує цей коміт з точки зору тегу.
Якщо ви хочете лише знати, чи на коміт вказує тег, ви можете перевірити результати:
git describe --exact-match <commit-id>
git describe --all --exact-match `git rev-parse HEAD`
git describe --tags --abbrev=0 REVце буде корисно, коли ви не хочете сміття на тезі.
git describe --all(для поточного перевіреного коміту) або git describe --all <commit>завжди робив майже все, що я коли-небудь хотів.
Якщо вам потрібно перший тег, що містить коміт, тоді:
git describe --contains <commit>
дає найкращу відповідь IMO. Якщо у вас часті теги, ніж використання "git tag --contens" у старому коміті у великому сховищі може зайняти деякий час для запуску та надасть вам усі теги, що містять цей коміт.
Ця форма опису git працює дуже швидко і дає вам одне вихідне значення, яке є першим тегом, що містить коміт і наскільки віддалений ваш коміт.
Як щодо цього?
git tag --points-at <commit-id>
Він дає вам усі теги, які має даний коміт (тоді як git describeлише один), і не включає теги для комітів-нащадків (як git tag --containsце робить).
Ви можете знайти цю інформацію в посібнику
git tag --contains <commit>
Я знайшов комбінацію обох найкращих відповідей, щоб дати мені те, що я хотів так:
git describe --tags --exact-match <commit-id>
Це дає вам тег, який призначений ТІЛЬКИ для цього коміту та для тих, хто не має анотацій. Корисно, коли ви хочете знайти теги і не турбуватися про те, щоб видалити форматування тоді (наприклад, для Дженкінса).
напр. $ git describe --tags --exact-match head~2
Дає вам:
$ ReleaseBeta
Консолідація деяких відповідей:
git tag --contains [<ref>]
і
git tag --points-at [<ref>]
або просто
git tag
поводитись однаково, друкуючи будь-які (і всі) теги для вказаного ref або поточного коміту, якщо не вказано.
git describe --tags [<ref>]
де <ref>за замовчуванням є поточним комітом, виходить із 128, якщо з комітом не пов’язані теги, і друкує тег, пов’язаний із комітом (шаблону, схоже, немає).
git describe [<ref>]
поводиться так само, як і за --tagsвинятком того, що друкує лише анотовані теги.
Надавши опцію --containsto, describeбуде надруковано тег, який пов'язаний з предком вказаного коміту. Наприклад
$ git init
Initialized empty Git repository in /tmp/test
$ git commit -m one --allow-empty
[master (root-commit) 7fdfff2] one
$ git commit -m two --allow-empty
[master cd5f8f1] two
$ git tag -am foo foo
$ git tag bar
$ git log --format=oneline
cd5f8f1f4f29eb164f83e224768ccaf37fe170ed (HEAD -> master, tag: foo, tag: bar) two
7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1 one
$ git describe 7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1
fatal: No tags can describe '7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1'.
Try --always, or create some tags.
$ git describe --contains 7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1
bar~1
git describe --tags <commit-id>для неназваних міток