Git уже более 15 лет, однако и сегодня он остается самым популярным среди систем управления версиями с распределенной архитектурой. Наиболее известен он своим знаменитым GitHub (Гитхаб) — это крупнейший удаленный репозиторий Гит, то есть то место, где разработчики хранят коды своих программ, документируют изменения и сохраняют старые версии. А помогают им в управлении версиями специальные метки или теги. В статье поговорим о том, что такое теги в репозитории Git и как с ними работать.
Читайте также: Регулярные выражения Bash: полный гайд
Что такое Git-теги
Чтобы понять, что представляют собой эти метки, нужно рассмотреть еще несколько терминов. Во-первых, это коммит (commit). Определение коммитов простое — это точки сохранения версий проекта. Несколько коммитов образуют ветку (branch), которая является наглядной демонстрацией истории изменений проекта, при этом веток может быть и несколько. Вот мы и подошли к ключевому определению.
Теги Гит — это метки, предназначенные для обозначения важных коммитов. По ним, как правило, можно отследить историю версий, поскольку ответственные разработчики помечают очередную версию именно такой ссылкой. Добавим, что Git tags, как и ветки, указывают на конкретный коммит, однако, в отличие от последних, у них нет истории коммитов. Теперь посмотрим, как выполняется работа с тегами Git, от создания, просмотра и публикации до замены, переключения и удаления.
Как создать теги Git
В Гит есть два основных вида меток: аннотированные и легковесные, и создаются они по-разному.
Создание аннотированных тегов
Аннотированными (или аннотируемыми) называются такие метки, которые содержат полную информацию о версии, включая имена и e-mail разработчиков, а также дату и время создания. Чтобы создать аннотированный тег, нужно использовать специальные параметры Git, называемые флагами. В данном случае это будут флаги -a и -m. Вот пример кода для создания аннотированной метки:
$ git tag -a ver-2.5 -m "beta version 2.5"
$ git tag
ver-0.1
ver-1.6
ver-2.5
Здесь $ git tag — основная команда для работы с метками, -a — параметр для создания аннотированного тега, за которым следует его идентификатор, а с помощью флага -m создается комментарий. Если попытаться создать аннотированный тег без комментария, откроется редактор, который предложит его ввести. Вывести затем данные метки вместе с коммитом можно, используя команду $ git show. Выглядит это так:
$ git show ver-2.5
tag ver-2.5
Tagger: Petr Ivanov <petr@company.ru>
Date: Fri Jul 1 18:02:35 2022 -0300
beta version 2.5
commit bf93b7eaa928fd77a55453118313701b04874051
Author: Ivan Petrov <ivan@company.ru>
Date: Mon Jan 3 16:41:02 2022 -0300
Как видим, команда $ git show сначала выводит данные автора тега, после чего идет комментарий, а затем данные коммита в виде контрольной хеш-суммы, которая состоит из 40 знаков. Также указывается автор коммита и дата его создания.
А проверить, что метка была создана успешно, можно при помощи флага -n. Эта команда очень простая:
$ git tag -n
Создание легковесных тегов
Легковесными тегами называются обычные указатели на коммиты, которые подходят для создания временных меток. Фактически легковесные метки представляют собой сохраненные в файлы контрольные хеш-суммы коммитов. Посмотрим на то, как выглядит код создания легковесной метки:
$ git tag ver-2.5a
$ git tag
ver-0.1
ver-1.6
ver-2.5
ver-2.5a
ver-2.6
А теперь попробуем вывести данные тега вместе с коммитом:
$ git show ver-2.5a
commit bf93b7eaa928fd77a55453118313701b04874051
Author: Ivan Petrov <ivan@company.ru>
Date: Mon Jan 3 16:41:02 2022 -0300
Как видим, дополнительной информации о теге нет — только данные коммита. Добавим, что для создания легковесных тегов флаги не используются.
Кстати, в официальном канале Timeweb Cloud мы собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать.
Как добавлять и удалять теги Git в удаленных репозиториях
Для добавления меток Гит во внешние репозитории и удаления из них следует использовать команду push в таком виде:
$ git push origin ver-2.5
origin здесь обозначает сокращенное имя первоначального удаленного репозитория, откуда проект был клонирован. Для добавления в репозиторий нескольких тегов используйте флаг --tags вот так:
$ git push origin --tags
Удаление меток из внешнего репозитория осуществляется несколькими способами, но наиболее простой — при помощи флага --delete:
$ git push origin --delete ver-2.5
А вот если мы введем такой код с флагом -d, который тоже указывает на удаление тега:
$ git tag -d ver-2.5
то для удаленного репозитория эта команда не сработает: флаг -d предназначен для удаления меток только на локальных, внутренних серверах.
Как переключать теги
Эта процедура выполняется при помощи команды checkout. Набрав в командной строке:
$ git checkout ver-2.5
Вы перейдете прямо к указанной метке. Однако учтите, что при переходе на теги открепляется указатель HEAD, а потому все последующие изменения будут сохраняться уже в новом коммите, не относящемся ни к одной из существующих веток. И переходить туда можно будет только по контрольной хеш-сумме. Так что не забывайте создавать новые ветки, если вносите изменения при открепленном указателе HEAD, который открепляется после ввода команды checkout.
Как посмотреть список Git-тегов
Делается это довольно просто, при помощи команды git tag, после чего все имеющиеся метки будут выведены ниже в алфавитном порядке. Пример:
$ git tag
ver-0.1
ver-1.6
ver-2.5
ver-2.5a
ver-2.6
А что если теги у нас обозначены по-разному и нам нужно вывести только некоторые, с определенной маркировкой? Для этого используются флаги -l или --list и выражение для поиска по шаблону, обозначаемое звездочками **, между которыми требуется подставить нужные знаки. Допустим, кроме меток из примера выше у нас есть еще такие: ver-1.6xyz, ver-2.5xyz, ver-2.6xyz. Тогда для того, чтобы вывести только их, вводим:
$ git tag -l *xyz*
ver-1.6xyz
ver-2.5xyz
ver-2.6xyz
Получаем такой список, где уже нет меток, которые были в первом списке, поскольку они не содержат сочетания символов xyz в своих идентификаторах.
Переназначение или замена тегов
Для обновления существующего тега используйте флаг -f, дающий команду на принудительную замену:
$ git tag -a -f ver-2.5a bf93b7eaa928fd77a55453118313701b04874051
В данном случае указывается также хеш коммита. Это нужно для того, чтобы программа сопоставила коммит с ID аннотированного тега, после чего весь контент для указанной метки будет переопределен. Но помните, что вся старая информация после переназначения метки будет удалена, поэтому применяйте эту функцию с осторожностью.
Резюме
Как видим, использование тегов делает Гит гибкой и удобной системой контроля версий. Представленные команды просты и функциональны, и их сможет быстро освоить даже начинающий разработчик, тем более что шпаргалку, состоящую из самых важных команд и флагов, мы для вас уже подготовили.
Статья оказалась полезной? Подписывайтесь, ставьте лайки и поделитесь ссылкой с друзьями.