Использование тегов

В этом документе описываются концепция использования тегов в Git и команда git tag. Теги — это ссылки, указывающие на определенные точки в истории Git. Обычно теги служат для захвата некой точки в истории, которая используется для релиза нумерованной версии (например, v1.0.1). Теги похожи на неизменяемые ветки, но они, в отличие от веток, не имеют истории коммитов после создания. Подробнее о ветках см. на странице, посвященной git branch. В этом документе описываются различные виды тегов, способы их создания, просмотра, удаления, предоставления доступа к ним и многое другое.

Создание тега

Для создания нового тега выполните следующую команду:

 git tag <имя_тега> 

Замените <имя_тега> семантическим идентификатором состояния репозитория на момент создания тега. Общеупотребительный шаблон для указания номеров версий выглядит как git tag v1.4. Git поддерживает два типа тегов: аннотируемые и облегченные. В предыдущем примере был создан облегченный тег. Облегченные и аннотируемые теги отличаются объемом хранящихся в них сопроводительных метаданных. Рекомендуется рассматривать аннотируемые теги как публичные, а облегченные — как частные. В аннотируемых тегах хранятся дополнительные метаданные, такие как имя создателя тега, адрес электронной почты и дата. Это важные данные для публичного релиза. Облегченные теги по сути являются «закладками» к коммитам, это просто имя и указатель на коммит, что удобно для создания быстрых ссылок на соответствующие коммиты.

Аннотируемые теги

Аннотируемые теги хранятся в базе данных Git в виде полных объектов. Напомним, в них находятся дополнительные метаданные, такие как имя создателя тега, адрес электронной почты и дата. Аналогично комментариям к коммитам существуют комментарии к аннотируемым тегам. Кроме того, для обеспечения безопасности аннотируемые теги можно подписывать и проверять с помощью GNU Privacy Guard (GPG). Рекомендуется использовать аннотированные, а не облегченные теги, чтобы иметь доступ ко всем связанным метаданным.

 git tag -a v1.4 

При выполнении этой команды будет создан аннотируемый тег с идентификатором v1.4. Затем команда откроет настроенный текстовый редактор по умолчанию, чтобы запросить ввод дальнейших метаданных.

 git tag -a v1.4 -m "my version 1.4" 

Эта команда аналогична предыдущей, однако в этой версии передаются параметр -m и комментарий. Этот удобный способ похож на команду git commit -m, так как с его помощью новый тег создается без открытия локального текстового редактора. Вместо этого применяется комментарий, переданный вместе с параметром -m.

Облегченные теги

 git tag v1.4-lw 

При выполнении этой команды создается облегченный тег с идентификатором v1.4-lw. Облегченные теги создаются, когда не используются параметры -a, -s или -m. Этот тип тегов создает новую контрольную сумму тега и сохраняет ее в каталоге .git/ репозитория проекта.

Просмотр тегов

Чтобы просмотреть список сохраненных в репозитории тегов, выполните следующую команду.

 git tag 

Она выведет список тегов:

 v0.10.0 v0.10.0-rc1 v0.11.0 v0.11.0-rc1 v0.11.1 v0.11.2 v0.12.0 v0.12.0-rc1 v0.12.1 v0.12.2 v0.13.0 v0.13.0-rc1 v0.13.0-rc2 

Чтобы уточнить список тегов, можно передать параметр -l и выражение с подстановочными знаками:

 $ git tag -l *-rc* v0.10.0-rc1 v0.11.0-rc1 v0.12.0-rc1 v0.13.0-rc1 v0.13.0-rc2 v0.14.0-rc1 v0.9.0-rc1 v15.0.0-rc.1 v15.0.0-rc.2 v15.4.0-rc.3 

В указанном выше примере используются параметр -l и выражение с подстановочными знаками -rc, возвращающее список всех тегов с префиксом -rc, который обычно используется для обозначения предвыпускных релизов.

Применение тегов к старым коммитам

В предыдущих примерах использования тегов демонстрируются операции без указания коммита. По умолчанию команда git tag создает тег для коммита, на который ссылается указатель HEAD. Вместо этого в git tag можно передать ссылку на конкретный коммит. В этом случае тег будет создан для указанного коммита, а не для коммита, на который ссылается указатель HEAD. Чтобы просмотреть список предыдущих коммитов, запустите команду git log.

 $ git log --pretty=oneline 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'feature' a6b4c97498bd301d84096da251c98a07c7723e65 add update method for thing 0d52aaab4479697da7686c15f77a3d64d9165190 one more thing 6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment' 

При выполнении команды git log будет выведен список коммитов. В этом примере мы создадим тег для самого верхнего коммита Merge branch 'feature'. Нам понадобится ссылка на SHA-хеш коммита, который мы передадим Git:

 git tag -a v1.2 15027957951b64cf874c3557a0f3547bd83b3ff6 

При выполнении приведенной выше команды git tag будет создан аннотируемый тег с идентификатором v1.2 для коммита, который мы выбрали в предыдущем примере с командой git log.

Переназначение тегов. Замена старых тегов

Если вы попытаетесь создать тег с таким же идентификатором, как у существующего тега, Git выдаст ошибку, как показано ниже:

 fatal: tag 'v0.4' already exists 

Кроме того, если вы попытаетесь создать тег для старого коммита с существующим идентификатором тега, Git выдаст такую же ошибку.

Если вам необходимо обновить существующий тег, используйте параметр -f FORCE.

 git tag -a -f v1.4 15027957951b64cf874c3557a0f3547bd83b3ff6 

Указанная выше команда сопоставит коммит 15027957951b64cf874c3557a0f3547bd83b3ff6 с идентификатором тега v1.4 и переопределит любой существующий контент для тега v1.4.

Публикация: отправка тегов в удаленный репозиторий

Публикация тегов похожа на отправку веток. По умолчанию команда git push не отправляет теги. Их необходимо указать в команде git push явным образом.

 $ git push origin v1.4 Counting objects: 14, done. Delta compression using up to 8 threads. Compressing objects: 100% (12/12), done. Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done. Total 14 (delta 3), reused 0 (delta 0) To git@bitbucket.com:atlasbro/gittagdocs.git * [new tag] v1.4 -> v1.4 

Для одновременной отправки сразу нескольких тегов необходимо указать в команде git push параметр --tags. Когда другие пользователи будут клонировать или осуществлять pull репозитория, они получат новые теги.

Переключение тегов

Вы можете просмотреть состояние репозитория по тегу с помощью команды git checkout.

 git checkout v1.4 

Указанная выше команда выполнит переход к тегу v1.4. При этом репозиторий перейдет в состояние открепленного указателя HEAD. Это значит, что любые внесенные изменения не будут добавлены в этот тег. Они попадут в новый открепленный коммит, который не будет принадлежать ни к какой ветке, и перейти на него можно будет только напрямую по SHA-хешу этого коммита. Поэтому рекомендуется создавать новую ветку каждый раз, когда вы вносите изменения, находясь в состоянии открепленного указателя HEAD.

Удаление тегов

Удаление тегов — довольно простая операция. Чтобы удалить определенный тег, передайте команде git tag параметр -d и идентификатор этого тега.

 $ git tag v1 v2 v3 $ git tag -d v1 $ git tag v2 v3 

В этом примере при выполнении команды git tag отобразился список тегов: v1, v2, v3. Затем была запущена команда git tag -d v1, которая удалила тег v1.

Резюме

Итак, теги — это дополнительный механизм для создания снимков состояния репозитория Git. Обычно теги используются для создания семантических идентификаторов номера версии, которые соответствуют циклам релизов программного обеспечения. Для создания, изменения и удаления тегов используется команда git tag. Существует два типа тегов: аннотируемые и облегченные. Обычно рекомендуется использовать аннотируемые теги, поскольку в них хранятся дополнительные важные метаданные об этом теге. В этом документе также упоминаются другие команды Git — git push и git checkout. Более подробную информацию об их использовании см. на соответствующих страницах.

Готовы изучить Git?

Попробуйте это интерактивное учебное руководство.

Начните прямо сейчас