Conventional Branch

Спецификация для добавления человеко- и машиночитаемого смысла к веткам

Conventional Branch 1.0.0

Краткое изложение

Conventional Branch относится к структурированной и стандартизированной конвенции именования веток Git, которая направлена на то, чтобы сделать ветки более читаемыми и действенными. Мы предложили некоторые префиксы веток, которые вы можете использовать, но вы также можете указать свою собственную конвенцию именования. Последовательная конвенция именования упрощает идентификацию веток по типу.

Ключевые моменты

  1. Имена веток, ориентированные на цель: Каждое имя ветки четко указывает на её цель, что позволяет всем разработчикам легко понять, для чего предназначена ветка.
  2. Интеграция с CI/CD: Использование согласованных имён веток может помочь автоматизированным системам (таким как конвейеры непрерывной интеграции/непрерывного развёртывания) запускать определённые действия на основе типа ветки (например, автоматическое развёртывание из веток релиза).
  3. Командная работа: Это способствует сотрудничеству внутри команд, делая цель ветки явной, уменьшая недопонимание и облегчая членам команды переключение между задачами без путаницы.

Спецификация

Префиксы именования веток

Спецификация веток поддерживает следующие префиксы и должна быть структурирована как:


<тип>/<описание>

Основные правила

  1. Используйте строчные буквенно-цифровые символы, дефисы и точки: Всегда используйте строчные буквы (a-z), цифры (0-9) и дефисы (-) для разделения слов. Избегайте специальных символов, подчёркиваний или пробелов. Для веток релиза точки (.) могут использоваться в описании для представления номеров версий (например, release/v1.2.0).
  2. Никаких последовательных, начальных или конечных дефисов или точек: Убедитесь, что дефисы и точки не появляются последовательно (например, feature/new--login, release/v1.-2.0), а также в начале или в конце описания (например, feature/-new-login, release/v1.2.0.).
  3. Сохраняйте ясность и краткость: Имя ветки должно быть описательным, но кратким, чётко указывающим цель работы.
  4. Включайте номера тикетов: При необходимости включайте номер тикета из вашего инструмента управления проектами для упрощения отслеживания. Например, для тикета issue-123 имя ветки может быть feature/issue-123-new-login.

Формальная грамматика

Следующая грамматика ABNF (Augmented Backus-Naur Form) формально определяет допустимые имена веток:

branch-name     = trunk-branch / prefixed-branch
trunk-branch    = "main" / "master" / "develop"
prefixed-branch = type "/" description
type            = "feature" / "feat" / "bugfix" / "fix"
                / "hotfix" / "release" / "chore"
description     = desc-segment *("-" desc-segment)
desc-segment    = 1*(ALPHA / DIGIT) *("." 1*(ALPHA / DIGIT))
ALPHA           = %x61-7A   ; строчные буквы a-z
DIGIT           = %x30-39   ; цифры 0-9

Примечание: Последовательные дефисы или точки, а также дефисы или точки в начале или конце описания не допускаются.

Примеры

Имя ветки Допустимо Примечания
main Основная ветка
master Основная ветка
develop Основная ветка
feature/add-login-page Новая функциональность
feat/add-login-page Короткий псевдоним для feature
bugfix/fix-header-bug Исправление ошибки
fix/header-bug Короткий псевдоним для bugfix
hotfix/security-patch Срочное исправление
release/v1.2.0 Релиз с номером версии
chore/update-dependencies Задача, не связанная с кодом
feature/issue-123-new-login Функциональность с номером тикета
Feature/Add-Login Прописные буквы не допускаются
feature/new--login Последовательные дефисы не допускаются
feature/-new-login Описание не может начинаться с дефиса
feature/new-login- Описание не может заканчиваться дефисом
release/v1.-2.0 Дефис рядом с точкой не допускается
fix/header bug Пробелы не допускаются
fix/header_bug Подчёркивания не допускаются
unknown/some-task Неизвестный тип префикса

Заключение

В заключение, conventional branch разработан для улучшения организации проекта, коммуникации и автоматизации в рабочих процессах Git.

Часто задаваемые вопросы

Почему типы веток не так детализированы, как Conventional Commits (например, build, ci, docs, style, refactor)?

Ветки отличаются от коммитов — они временные и используются в основном до слияния. Введение слишком большого количества типов веток было бы лишним и усложняло бы их управление и запоминание.

Какие инструменты можно использовать для автоматического определения того, что член команды не соответствует данной спецификации?

Вы можете использовать commit-check для проверки спецификации веток или commit-check-action, если ваш код размещён на GitHub.

Могу ли я определить собственные типы веток помимо перечисленных?

Да. Спецификация определяет рекомендуемый набор типов, но команды могут определять дополнительные пользовательские типы для своего рабочего процесса. Однако важно чётко документировать пользовательские типы, чтобы все члены команды и автоматизированные инструменты были осведомлены о них.

Как Conventional Branch соотносится с Conventional Commits?

Conventional Branch вдохновлён Conventional Commits и следует схожей философии: привнести структуру, читаемую людьми и машинами, в метаданные Git. Conventional Commits стандартизирует сообщения коммитов, а Conventional Branch стандартизирует имена веток. Обе спецификации естественным образом дополняют друг друга.

Как следует обращаться с долгоживущими ветками, такими как develop или staging?

Долгоживущие интеграционные или средовые ветки (например, develop, staging, production) рассматриваются как основные ветки и не требуют префикса. В формальной грамматике ABNF к trunk‑веткам относятся только main/master/develop; использование дополнительных долгоживущих веток (таких как staging, production и т.п.) как trunk‑веток является командным расширением за пределами базовой спецификации и должно быть явно задокументировано. Их следует именовать последовательно во всём проекте.