Тегування

Як і більшість VCS, Git має можливість позначати певні моменти в історії сховища як важливі. Зазвичай люди використовують цю функцію для позначення точок релізу (v1.0, v2.0 і так далі).

Перелік тегів

Перерахувати існуючі теги у Git’і дуже просто. Просто введіть git tag (з необов’язковим -l або --list).

$ git tag
v1.0
v2.0

Ця команда перелічує мітки в алфавітному порядку, порядок їх відображення не має особливого значення. Ви також можете шукати теги, які відповідають певному шаблону. Наприклад, сховище коду Git містить понад 500 тегів. Якщо вас цікавить лише серія 1.8.4, ви можете виконати цю команду:

$ git tag -l "1.8.5*"
v1.8.5
v1.8.5-rc0
v1.8.5-rc1
v1.8.5-rc2
v1.8.5-rc3

Створення тегів

Git підтримує два типи тегів: легкі та анотовані.

Полегшений тег дуже схожий на гілку, яка не змінюється – це просто вказівник на конкретний комміт.

Анотовані мітки, однак, зберігаються як повноцінні об’єкти в базі даних Git. Вони мають контрольну суму, містять ім’я тегувальника, електронну пошту та дату, мають повідомлення про тегування, а також можуть бути підписані та перевірені за допомогою GBU Privacy Guard (GPG). Зазвичай рекомендується створювати анотовані мітки, щоб мати всю цю інформацію; але якщо вам потрібна тимчасова мітка або з якихось причин ви не хочете зберігати іншу інформацію, доступні також полегшені мітки.

Анотовані теги

Створити анотовану мітку в Git’і дуже просто. Найпростіший спосіб - вказати -a при виконанні команди tag:

$ git tag -a VCS -m "Version Control System - tags"
$ git tag
VCS
$ git show VCS
tag VCS
Tagger: Serhii Horodilov <sgorodil@gmail.com>
Date:   Wed Aug 16 19:04:24 2023 +0300

Version Control System - tags

Легкі мітки

Інший спосіб позначення коммітів - використання полегшених тегів. Це, по суті, контрольна сума комміту, яка зберігається у файлі - ніяка інша інформація не зберігається. Щоб створити полегшену мітку, не вказуйте жодної з опцій -a, -s або -m, просто вкажіть назву мітки:

$ git tag tagging
$ git tag
VCS
tagging
$ git show tagging
commit 21ae739f891c6ee6a77d8986402cb1e69a9b6a88 (HEAD -> feature/vcs, tag: tagging, tag: VCS)
Author: Serhii Horodilov <sgorodil@gmail.com>
Date:   Wed Aug 16 18:45:23 2023 +0300

    Move commits.txt content to "basics" document

Відмітити пізніше

Ви також можете позначати коміти після того, як ви пройшли повз них.

$ git log --pretty=format:%h -3
21ae739
ea4ac00
df216cf
$ git tag v1.4 ea4ac00
$ git show v1.4
commit ea4ac002604ca897ba05c846d63af1618c123b6f (tag: v1.4)
Author: Serhii Horodilov <sgorodil@gmail.com>
Date:   Wed Aug 16 18:32:27 2023 +0300

    Fix code-block outputs

Видалення тегів

Щоб видалити тег у вашому локальному сховищі, ви можете скористатися git tag -d <tagname>.

$ git tag -d VCS
Deleted tag 'VCS' (was eef3831)

Перевірка тегів

Якщо ви хочете переглянути версії файлів, на які вказує тег, ви можете виконати git checkout цього тегу, хоча це переводить ваше сховище у стан «відокремленої ГОЛОВИ», що має деякі погані побічні ефекти:

$ git checkout VCS
Note: switching to 'vcs'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 60565a1 Fix GitFlow branches list

У стані «detached HEAD», якщо ви внесете зміни, а потім створите коміт, тег залишиться незмінним, але ваш новий коміт не належатиме до жодної гілки і буде недоступним, окрім як за точним хешем коміту. Таким чином, якщо вам потрібно внести зміни - скажімо, ви виправляєте ваду у старій версії - вам, як правило, краще створити гілку:

$ git checkout -b vcs-tag-branch VCS
Switched to a new branch 'vcs-tag-branch'