Введение в теги
Теги в Git используются для пометки важных моментов в истории проекта, таких как выпуски версий (например, v1.0). Они позволяют фиксировать определённые коммиты для последующего удобного доступа. В этой статье мы рассмотрим, как просматривать, создавать, удалять и работать с тегами, а также разберём различия между аннотированными и легковесными тегами.
Просмотр списка тегов
Для просмотра списка тегов используйте команду git tag. Параметры -l или --list опциональны:
git tag
v1.0
v2.0 Теги отображаются в алфавитном порядке. Для поиска тегов по шаблону используйте -l с шаблоном. Например, чтобы найти теги для версии 1.8.5:
git tag -l "v1.8.5*"
v1.8.5
v1.8.5-rc0
v1.8.5-rc1
v1.8.5-rc2
v1.8.5-rc3
v1.8.5.1
v1.8.5.2
v1.8.5.3
v1.8.5.4
v1.8.5.5 Примечание: Для фильтрации по шаблону обязательно указывайте -l или --list. Без шаблона эти параметры необязательны.
Создание тегов
Git поддерживает два типа тегов: легковесные и аннотированные.
- Легковесные теги — это указатели на коммит, не содержащие дополнительной информации.
- Аннотированные теги — полноценные объекты в базе Git, включающие имя автора, email, дату, сообщение и возможность подписи с помощью GPG.
Рекомендуется использовать аннотированные теги для сохранения полной информации, но легковесные подойдут для временных меток.
Аннотированные теги
Для создания аннотированного тега используйте опцию -a и укажите сообщение с помощью -m:
git tag -a v1.4 -m "my version 1.4"
git tag
v0.1
v1.3
v1.4 Для просмотра информации о теге используйте git show:
git show v1.4
tag v1.4
Tagger: Ben Straub
Date: Sat May 3 20:19:12 2014 -0700
my version 1.4
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon
Date: Mon Mar 17 21:52:11 2008 -0700
Change version number Вывод включает данные об авторе, дате, сообщении и связанном коммите.
Легковесные теги
Для создания легковесного тега просто укажите его имя без опций -a, -s или -m:
git tag v1.4-lw
git tag
v0.1
v1.3
v1.4
v1.4-lw
v1.5 При просмотре легковесного тега с помощью git show отображается только информация о коммите:
git show v1.4-lw
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon
Date: Mon Mar 17 21:52:11 2008 -0700
Change version number Отложенная расстановка тегов
Вы можете добавить тег к уже существующему коммиту, указав его хеш. Например, для истории:
git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
a6b4c97498bd301d84096da251c98a07c7723e65 Create write support
0d52aaab4479697da7686c15f77a3d64d9165190 One more thing
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'
0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc Add commit function
4682c3261057305bdd616e23b64b0857d832627b Add todo file
166ae0c4d3f420721acbb115cc33848dfcc2121a Create write support
9fceb02d0ae598e95dc970b74767f19372d61af8 Update rakefile
964f16d36dfccde844893cac5b347e7b3d44abbc Commit the todo
8a5cbc430f1a9c3d00faaeffd07798508422908a Update readme Чтобы отметить коммит 9fceb02 как v1.2:
git tag -a v1.2 9fceb02
git tag
v0.1
v1.2
v1.3
v1.4
v1.4-lw
v1.5 Проверьте тег:
git show v1.2
tag v1.2
Tagger: Scott Chacon
Date: Mon Feb 9 15:32:16 2009 -0800
version 1.2
commit 9fceb02d0ae598e95dc970b74767f19372d61af8
Author: Magnus Chacon
Date: Sun Apr 27 20:43:35 2008 -0700
Update rakefile Обмен тегами
По умолчанию git push не отправляет теги на удалённый сервер. Для отправки одного тега используйте:
git push origin v1.5
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@github.com:schacon/simplegit.git
* [new tag] v1.5 -> v1.5 Для отправки всех тегов используйте опцию --tags:
git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 160 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git
* [new tag] v1.4 -> v1.4
* [new tag] v1.4-lw -> v1.4-lw Примечание: Команда git push --tags отправляет оба типа тегов. Для отправки только аннотированных тегов используйте git push --follow-tags.
Удаление тегов
Для удаления локального тега используйте git tag -d:
git tag -d v1.4-lw
Deleted tag 'v1.4-lw' (was e7d5add) Для удаления тега на удалённом сервере используйте один из двух способов:
1. Укажите пустое значение для тега:
git push origin :refs/tags/v1.4-lw
To git@github.com:schacon/simplegit.git
- [deleted] v1.4-lw 2. Используйте опцию --delete:
git push origin --delete v1.4-lw Переход на тег
Чтобы перейти к версии, указанной тегом, используйте git checkout:
git checkout v2.0.0
Note: switching to 'v2.0.0'.
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 performing another checkout.
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
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final Переход на тег переводит репозиторий в состояние detached HEAD. Изменения в этом состоянии не привязаны к ветке, и новые коммиты доступны только по хешу. Для внесения изменений создайте новую ветку:
git checkout -b version2 v2.0.0
Switched to a new branch 'version2' Теперь коммиты в ветке version2 будут отличаться от тега v2.0.0.
Заключение
Теги в Git — мощный инструмент для маркировки ключевых моментов в истории проекта. Аннотированные теги предпочтительны для официальных выпусков, так как содержат дополнительную информацию. Легковесные теги подходят для временных меток. Используйте git tag для управления тегами, git push для их отправки и будьте осторожны при работе в состоянии detached HEAD.
Отзывы