Git уже более 15 лет, однако и сегодня он остается самым популярным среди систем управления версиями с распределенной архитектурой. Наиболее известен он своим знаменитым GitHub (Гитхаб) — это крупнейший удаленный репозиторий Гит, то есть то место, где разработчики хранят коды своих программ, документируют изменения и сохраняют старые версии. А помогают им в управлении версиями специальные метки или теги. В статье поговорим о том, что такое теги в репозитории Git и как с ними работать.
Чтобы понять, что представляют собой эти метки, нужно рассмотреть еще несколько терминов. Во-первых, это коммит (commit). Определение коммитов простое — это точки сохранения версий проекта. Несколько коммитов образуют ветку (branch), которая является наглядной демонстрацией истории изменений проекта, при этом веток может быть и несколько. Вот мы и подошли к ключевому определению.
Теги Гит — это метки, предназначенные для обозначения важных коммитов. По ним, как правило, можно отследить историю версий, поскольку ответственные разработчики помечают очередную версию именно такой ссылкой. Добавим, что Git tags, как и ветки, указывают на конкретный коммит, однако, в отличие от последних, у них нет истории коммитов. Теперь посмотрим, как выполняется работа с тегами 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
Как видим, дополнительной информации о теге нет — только данные коммита. Добавим, что для создания легковесных тегов флаги не используются.
Для добавления меток Гит во внешние репозитории и удаления из них следует использовать команду 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 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 аннотированного тега, после чего весь контент для указанной метки будет переопределен. Но помните, что вся старая информация после переназначения метки будет удалена, поэтому применяйте эту функцию с осторожностью.
Как видим, использование тегов делает Гит гибкой и удобной системой контроля версий. Представленные команды просты и функциональны, и их сможет быстро освоить даже начинающий разработчик, тем более что шпаргалку, состоящую из самых важных команд и флагов, мы для вас уже подготовили.
Кстати, в официальном канале Timeweb Cloud мы собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать.