Перейти к содержимому

теги Git

Описание

Теги — это ссылки, указывающие на конкретные коммиты в истории Git. Основная функция тегирования — фиксация определенной точки в истории, обычно для обозначения выпуска версии. Теги неизменяемы: после создания они не отслеживают историю коммитов.

gittag

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

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

git tag

bash
git tag <name-of-tag>

При создании тега замените <name-of-tag> на семантический идентификатор состояния репозитория. Git поддерживает два типа тегов: аннотированные и легкие (lightweight). Основное отличие между ними заключается в объеме хранимых метаданных.

Аннотированные теги

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

Выполнение приведенной ниже команды создаст новый аннотированный тег с идентификатором v1.3. После этого откроется настроенный текстовый редактор по умолчанию, предложив ввести сообщение о тегировании.

git annotated tag

bash
git tag -a v1.3

Легкие теги

Приведенная ниже команда создает легкий тег с идентификатором v1.3-lw. Легкие теги создаются без опций -a, -s или -m. Они просто хранят указатель на конкретный объект коммита в директории .git/refs/tags/.

git lightweight tag

bash
git tag v1.3-lw

Список тегов

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

git tag command

bash
git tag

В результате вы увидите вывод, похожий на этот:

git tag output

bash
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 с выражением подстановки (wildcard) для фильтрации списка тегов:

git tag with wildcard

bash
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

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

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

git log

bash
git log --pretty=oneline
29389857951b64cf874c3557a0f3547bd83b899a Merging branch 'crossword'
b4a5697498bd301d84096da251c98a07c7723e65 init method for crossword
89f3aaab4479697da7686c15f77a3d64d9165190 little changes in logic
3a4a271eda8725415634dd79daabbc4d9b6008e Merging branch 'how-it-works'

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

git tag for old commits

bash
git tag -a v1.2 29389857951b64cf874c3557a0f3547bd83b899a

Замена старых тегов

Попытка создать тег с уже существующим идентификатором приведет к ошибке. Используйте опцию -f (force), чтобы обновить существующий тег, что перезапишет его предыдущее содержимое.

git tag replacing old tags

bash
git tag -a -f v1.3 29389857951b64cf874c3557a0f3547bd83b899a

Отправка тегов на удаленный репозиторий

Чтобы отправить тег на удаленный репозиторий, передайте имя тега в команду git push. Это гарантирует, что другие пользователи, клонирующие репозиторий, получат новый тег.

git tag, pushing to remote

bash
git push origin v1.3
Counting objects: 9, done.
Delta compression using up to 5 threads.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (12/12), 2.05 KiB | 0 bytes/s, done.
Total 12 (delta 3), reused 0 (delta 0)
To [email protected]:gr8/gittagdocs.git
* [new tag] v1.3 -> v1.3

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

Вы можете использовать команду git checkout для просмотра помеченного коммита. Это переведет репозиторий в состояние detached HEAD. Любые новые коммиты, созданные в этом состоянии, не будут принадлежать ни одной ветке и будут доступны только по их SHA-хешу.

git tag, checking over tags

bash
git checkout v1.3

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

Вы можете удалить тег, передав опцию -d и идентификатор тега в git tag. См. пример ниже:

git tag, deleting tags

bash
git tag
v1
v2
v3
git tag -d v1
git tag
v2
v3

Практика

Какие функции и опции есть у команды 'git tag' в Git?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.