Подтвердить что ты не робот

Как я могу определить, является ли данный тег git аннотированным или легким?

Я печатаю git tag и перечисляет мои текущие теги:

1.2.3
1.2.4

Как я могу определить, какая из них аннотирована, а какая - легкая?

4b9b3361

Ответ 1

git for-each-ref говорит вам, что каждый реф по умолчанию, его идентификатор и его тип. Чтобы ограничить его только тегами, выполните git for-each-ref refs/tags.

[T] он выводит три поля: хеш объекта, тип объекта и имя в refs/tags, которое ссылается на объект. Так называемый "легкий" тег - это имя в ссылках/тегах, которое ссылается на объект commit. "Аннотированный" тег - это имя в ссылках/тегах, которое ссылается на объект tag.

- Solomon Slow (in the comments)

Ответ 2

Сортировка команды git show-ref -d --tags делает это, поскольку яркие теги появляются один раз на выходе, а аннотированные теги появляются дважды. Кроме того, только аннотированные теги включают в себя оператор "^ {}" разыменования на выходе.

588e9261795ec6dda4bd0a881cf1a86848e3d975 refs/tags/1.2.3
7fe2caaed1b02bb6dae0305c5c0f2592e7080a7a refs/tags/1.2.4
588e9261795ec6dda4bd0a881cf1a86848e3d975 refs/tags/1.2.4^{}

И этот вывод может быть массирован с помощью команд unix sort, sed, cut и uniq, чтобы сделать вывод более читаемым:

git show-ref -d --tags       | 
cut -b 42-                   | # to remove the commit-id
sort                         |
sed 's/\^{}//'               | # remove ^{} markings
uniq -c                      | # count identical lines
sed 's/2\ refs\/tags\// a /' | # 2 identicals = annotated
sed 's/1\ refs\/tags\//lw /'   

Для моего исходного репо (из моего вопроса) он выводит это:

  lw 1.2.3
   a 1.2.4

(например, 1.2.3 был "легким" и "1.2.4" был аннотирован).

Ответ 3

Получить имя тега (скажем foo), а затем сделать git cat-file -t foo. Если это аннотированный тег, cat-file скажет вам, что это "тег". Если это простой тег, cat-file скажет вам, что это "commit".

Обновление: Как сказал в своем комментарии оксюморон, git show работает тоже, но он дает вам больше информации, чем просто те теги.

Ответ 4

Попробуйте использовать git describe

https://git-scm.com/docs/git-describe

По умолчанию (без --all или --tags) git описать только показывает аннотированные теги.