Я ввожу, git tagі в ньому перелічуються мої поточні теги:
1.2.3
1.2.4
Як я можу визначити, що з них коментується, а яке легше?
Я ввожу, git tagі в ньому перелічуються мої поточні теги:
1.2.3
1.2.4
Як я можу визначити, що з них коментується, а яке легше?
Відповіді:
git for-each-refповідомляє, до чого відноситься кожне посилання за замовчуванням, його ідентифікатор та тип. Щоб обмежити його лише тегами, зробіть git for-each-ref refs/tags.
[T] Вивід має три поля: хеш об'єкта, тип об'єкта та ім'я у посиланнях / тегах, яке посилається на об'єкт. Так званий "полегшений" тег - це назва у посиланнях / тегах, що стосується
commitоб'єкта. "Анотований" тег - це ім'я у посиланнях / тегах, яке стосуєтьсяtagоб'єкта.- Соломон Повільний (у коментарях)
Ось приклад:
git for-each-ref refs/tags
902fa933e4a9d018574cbb7b5783a130338b47b8 commit refs/tags/v1.0-light
1f486472ccac3250c19235d843d196a3a7fbd78b tag refs/tags/v1.1-annot
fd3cf147ac6b0bb9da13ae2fb2b73122b919a036 commit refs/tags/v1.2-light
commitабо a tag. Я припускаю, що це вказує на легкі та анотовані теги відповідно?
commitлегкий і tagанотований?
commitоб'єкта. "Анотований" тег - це ім'я у посиланнях / тегах, яке стосується tagоб'єкта.
Це 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" коментувався).
Отримайте назву тегу (скажімо foo), а потім виконайте a git cat-file -t foo. Якщо це анотований тег, cat-fileвін скаже вам, що це "тег". Якщо це простий тег, cat-fileвін скаже вам, що це "коміт".
Оновлення: Як сказав оксиморон у своєму коментарі, він git showтеж працює, але він надає більше інформації, ніж просто про тег.
Будь ласка, спробуйте використовувати git describe
https://git-scm.com/docs/git-describe
За замовчуванням (без --all або --tags) git опис показує лише анотовані теги.
git tag -nщось робить для вас?