Отслеживание версий программного обеспечения – довольно сложная задача, и Git помогает с ней справиться. С помощью теговой системы Git вы можете создавать версионированные номера версий, которые бы указывали на определенные коммиты, и использовать их в автоматизации CI/CD для публикации версий.
Тегированные версии в Git
Теги Git очень напоминают ветки Git. Это отметки, которые указывают на определенные коммиты, и их можно использовать для извлечения репозитория в определенный момент времени. Однако их нельзя обновить или изменить (в отличие от ветвей), и они всегда указывают на конкретную версию.
Как правило, теги используются для присвоения определенным выпускам номеров версий, и в большинстве случаев для этого используется формат семантического версионирования (Major.Minor.Patch). Такой подход довольно полезен с точки зрения отслеживания версий, особенно если при развертывании возникают проблемы и необходимо вернуться к последнему одобренному тегу.
Кроме того, теги используются для передачи сигнала конвейерам CI/CD о том, что необходимо опубликовать версию. Некоторые репозиторию могут быть настроены на публикацию «последнего» выпуска для каждого отдельного коммита, особенно после тестирования ветвей разработки. Также теги часто используют для того, чтобы CI-конвейеры выпуска запускались и развертывались только по специальному запросу.
Когда вы отправляете изменения в удаленный репозиторий, например, GitHub, ваши теги будут отображаться во вкладке «Releases» (Версии). Таким образом, другие люди могут клонировать и загружать репозитории по этому тегу.
Выгрузить определенные теги можно с помощью команды
git checkout
что аналогично извлечению ветки.
git checkout v1.0.0
Создание тегов
Для того, чтобы создать простой тег, много сил вам не потребуется. Вам нужно просто извлечь коммит или ветку, которой вы хотите присвоить тег, и запустить команду git tag с названием тега.
git checkout master
git tag v1.0.0
В любом случае есть общепринятая практика, которая подразумевает использование комментированных тегов, то есть тегов, которые позволяют задавать описание и могут хранить дополнительную информацию о том, кто их создал и когда (по аналогии с коммитами).
git tag -a v1.0.0 -m "New Release Version - Summary"
Кроме того, вы можете присваивать теги коммитам, которые были созданы ранее, при этом не извлекая их:
git tag -a v1.2 commit_id
Теги нельзя отправлять в удаленные репозитории, такие как GitHub, с помощью стандартной команды Git push. Эту команду необходимо запускать с флагом --tags или отправлять имя тега вручную.
git push origin --tags
Удаление и редактирование тегов
Теги можно удалять, но важно помнить, что, если вы удалите теги с удаленных серверов, то можете подпортить работу других людей, которые работают с вашим репозиторием. Однако, так как вы на самом деле не редактируете историю Git, то это больше похоже на удаление старой ветки, которая не затрагивает ни один из текущих коммитов.
Вы можете удалить тег по имени с помощью флага -d:
git tag -d v1.0.0
Вы даже можете удалить их из удаленного репозитория с помощью следующей команды:
git push origin --delete v1.0.0
А для того, чтобы отредактировать тег, вам понадобиться флаг -f, который заставит Git переписать существующий тег:
git tag -f v1.0.0
Создание версий на GitHub
GitHub также поддерживает теги, но расширяет их возможности за счет собственной системы версий (Releases). Версии можно создать из тегов, любого конкретного коммита или с помощью указателя HEAD на любую текущую ветку.
Основная цель публикации версий – предоставить людям для загрузки заранее собранные двоичные файлы. Такая функция довольно полезна на GitHub, но теги ее предоставить не могут. В случае тегов пользователям все равно придется клонировать определенный тег и производить сборку из исходного кода.
Еще одна цель – документирование примечаний к версиям. Система версий GitHub также поддерживает Markdown. Таким образом, пользователи могут легко просматривать версии и наблюдать за их большими изменениями с течением времени.
Создать версию довольно легко. Нажмите «Releases» на боковой панели вашего репозитория и создайте новую версию:
На этом экране вы можете ввести примечания к версии с помощью Markdown и перетащить двоичные файлы, необходимые для этой версии. GitHub автоматически предоставит вам ссылку на исходный код по этому тегу.
Кроме того, вы можете создавать версии автоматически с помощью GitHub Actions. Это избавит вас от постоянной загрузки двоичных файлов. Таким образом, вы сможете автоматизировать ваш репозиторий.