GitHub -- Releases и теги
Git tag — именованная метка на конкретный коммит; GitHub Release — публикация версии с описанием изменений, прикреплёнными файлами и автоматической ссылкой на архив кода.
Зачем нужно
Теги фиксируют конкретный момент в истории как «версия 1.2.0». GitHub Releases делают версии публичными: пользователи видят changelog, могут скачать архив. Для npm-пакетов публикация версии неотделима от тега. Без тегов невозможно откатиться к точной версии в продакшне.
Где используется
- npm-пакеты: каждая публикация в npm привязана к тегу
- Продуктовые приложения: фиксация версий для деплоя
- Open source: пользователи следят за Releases для обновлений
- CI/CD: триггер деплоя по тегу
v*.*.*
Основной контент
Git теги
# Создать легковесный тег (просто указатель)
git tag v1.0.0
# Создать аннотированный тег (с автором, датой, сообщением)
git tag -a v1.0.0 -m "Release version 1.0.0"
# Тег для конкретного коммита
git tag -a v1.0.0 a1b2c3d -m "Release 1.0.0"
# Просмотр тегов
git tag # список всех
git tag -l "v1.*" # по паттерну
git show v1.0.0 # детали тега
# Запушить теги в remote
git push origin v1.0.0 # один тег
git push origin --tags # все теги
Семантическое версионирование (SemVer)
Формат: MAJOR.MINOR.PATCH → v1.2.3
| Часть | Когда увеличивать | Пример |
|---|---|---|
| MAJOR | Ломающие изменения (breaking changes) | 1.0.0 → 2.0.0 |
| MINOR | Новые фичи (обратно совместимые) | 1.0.0 → 1.1.0 |
| PATCH | Исправления багов | 1.0.0 → 1.0.1 |
Предрелизные: v1.0.0-beta.1, v2.0.0-rc.1
GitHub Release
На GitHub: Releases → Draft a new release → выбрать тег (или создать новый) → написать описание.
Хорошее описание Release:
## What's Changed
### New Features
- Добавлена тёмная тема (#123)
- Поддержка OAuth 2.0 (#145)
### Bug Fixes
- Исправлен краш при пустом списке (#167)
### Breaking Changes
- `init` теперь возвращает Promise (ранее void)
**Full Changelog**: https://github.com/user/repo/compare/v1.1.0...v1.2.0
Автоматическое создание тегов в CI
# GitHub Actions: создать релиз при пуше тега
name: Release
on:
push:
tags:
- 'v*'
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Create Release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
npm publish по тегу
npm version patch # обновляет package.json + создаёт тег
git push --follow-tags
npm publish # публикует на npmjs.com
Частые ошибки
- Тег без push —
git tagсоздаёт тег локально; нуженgit push origin --tags - Не следовать SemVer — произвольные версии (v1, v2, v9000) ломают ожидания пользователей
- Не удалять ошибочный тег — тег можно удалить:
git tag -d v1.0.0+git push origin --delete v1.0.0; на npm — нельзя, только deprecate