Git Tag
Git имеет возможность помечать определённые моменты в истории как важные. Как правило, эта функциональность используется для отметки моментов выпуска версий (v1.0, и т. п.). Такие пометки в Git называются тегами.
Создать тэг
Тэг - ссылка на коммит, в отличие от ветки, это просто метка. Тэг никуда не перемещается, его задача - всегда указывать на определенный коммит.
По умолчанию ставиться на HEAD, но можем указать хэш коммита:
git tag v0.0.1 d324c8dae
// быстро перейти в состояние проекта версии v0.0.1
git checkout v0.0.1
// если тег установлен после пуша, можно отправить в хранилище только тег
git push origin v0.0.1
To github.com:vadim-m/test-auto-tag.git
* [new tag] v0.0.1 -> v0.0.1
// запушить все локальные теги
git push origin --tags
// удалить тег из хранилища github
git push origin --delete v0.0.1
To github.com:vadim-m/test-auto-tag.git
- [deleted] v0.0.3
После создания можно смотреть историю не по коммитам, а по тэгам:
git show --quiet v0.0.1
// также тэги видно при просмотре git log
git log --oneline
// или так
git log --pretty=oneline
Виды тегов
Лёгкие теги
Представляют собой только ссылку на коммит. Создаются как выше (HEAD по умолчанию):
git tag v0.0.2
git log
Теги с аннотацией
Тут к метке добавляется информация, содержащая описание, и данные о том, кто и когда создал данный тег. Они более информативны и рекомендуется использовать именно их.
git tag -a -m "Добавил github-action - Version 0.0.3" v0.0.3 d63f42
// показать аннотированный тег
git show v.0.0.3
Маркировка релизов
Один из основных примеров использования тэгов в git - это маркировка релизов, чтобы чётко указать на каком коммите была выпущена определенная версия программы. Так как тэг является ссылкой на коммит и никуда не смещается при коммитах, это позволяет использовать его как неизменную метку, указывающую на "факт" выпуска определенной версии.
// Можно начать новую ветку прямо с тэга для разработки новой версии
git branch v0.0.2 v.0.0.1
// Посмотреть все теги
git tag
// Какие релизы содержат определенный коммит (по хэшу)
git tag --contains d63f42
// Вывести тег с сообщением коммита в одну строк
git tag -n1
// Вывести историю разработки с определенного тега
git log --oneline v0.0.1
// Вывести теги по маске
git tag -n -l "v0.0*"
// Удалить теги
git tag -d v0.0.3 v0.0.2 v.0.0.1
Добавление авто-тегов при MR
В магазине Github Action есть специальный Github Tag Bump Action, цель которого - автоматическое повышении последней версии и добавление тега к коммиту ветки master при слиянии в формате SemVer. То есть при аппруве MR из другой ветки в master, происходит повышении (по умолчанию - MINOR) в автоматическом режиме.
Чтобы подключать данный action к проекту, нужно в скрытой папке .github/workflows проекта создать yaml-файл (github-actions.yaml), с текстовым описанием экшена:
name: Bump version
on:
pull_request:
types:
- closed
branches:
- master
jobs:
build:
if: github.event.pull_request.merged == true
runs-on: ubuntu-22.04
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.merge_commit_sha }}
fetch-depth: '0'
- name: Bump version and push tag
uses: anothrNick/github-tag-action@v1 # Don't use @master or @v1 unless you're happy to test the latest version
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # if you don't want to set write permissions use a PAT token
WITH_V: true
После добавления данного экшена основной flow работы с git становится следующим:
- Зафиксировать некоторые изменения в ветке (не master!)
- Запушить ветку в Github
- Открыть PR в master
- При слиянии будет получена последняя версия проекта и увеличена по правилам:
- по умолчанию увеличивается minor-версия
- если нужно увеличить major или patch нужно добавить флаги к сообщению коммита при слиянии #patch и #major
Пример с повышением patch-версии:
Запуск джобы:
Результат:
Пример с повышением major-версии (внимание на отображение сообщения коммита):
Релизы
В Github есть функционал Releases для удобного распространения ПО.
Github releases — это развертываемые итерации программного обеспечения, которые можно упаковать и предоставить широкой аудитории для скачивания и использования. Выпуски основаны на тегах Git, которые отмечают определенную точку в истории репозитория. Дата тега может отличаться от даты выпуска, так как они могут быть созданы в разное время.
Ссылка на релизы помещена на главную страницу проекта. Зайдя в этот раздел, пользователь всегда может найти последнюю версию программы, changelog и полную историю версий. Вместе с каждым релизом публикуются текстовые примечания, ссылки на бинарный файл и исходный код.
В окне для создания нового релиза можно указать номер версии и описание релиза, можно присоединить отдельные файлы, можно выбрать тэг источник, а также предыдущий релизный тэг и, щелкнув на кнопку "Generate release notes", сгенерировать авто сравнение изменений.
Про тэги JavaScript.ru - youtube.com
Авто увелечение тега через Github Actions - github.com
How to Release Code With Github - youtube.com