Тег - постійне ім'я для конкретного коміту, зазвичай версії: v2.4.0. На відміну від гілки, тег не рухається.
- Легкий тег - просто вказівник на коміт, як гілка, що не рухається:
git tag v2.4.0
- Анотований тег - окремий об'єкт Git з автором, датою, повідомленням і, за бажанням, підписом GPG/SSH:
git tag -a v2.4.0 -m "Реліз 2.4.0: експорт рахунків"
git tag -s v2.4.0 -m "..." # підписаний
Для релізів використовують анотовані: git describe за замовчуванням бачить лише їх, і видно, хто й коли позначив реліз.
Теги треба відправляти явно - звичайний git push їх не передає:
git push origin v2.4.0
git push --follow-tags # анотовані теги, що вказують на відправлені коміти
Практики:
- Семантичне версіонування (
MAJOR.MINOR.PATCH): ламаюча зміна - major, нова функція - minor, виправлення - patch. Composer і npm розв'язують залежності саме за тегами. - Тег запускає реліз: CI на
pushтегу збирає артефакти, створює GitHub Release, публікує пакет. - Не переміщати опубліковані теги. Якщо в
v2.4.0помилка, випускаютьv2.4.1. Переписаний тег у когось уже завантажений, і в різних людей «v2.4.0» означатиме різний код. git describe --tagsдає версію для збирання на кшталтv2.4.0-12-ga1b2c3d- 12 комітів після тегу.