Git flow, trunk-based, feature branches

↑ 6.1 Git · ← Предыдущая · → Следующая

Желательно~3 мин чтенияУровень: middle

Зачем это на собесе

Ждут сравнения стратегий и связи с частотой релизов и CI/CD.

Объяснение

СтратегияВеткиКогда
Git flowmain, develop, feature/*, release/*, hotfix/*версионные релизы, мобильные приложения, редкие выкладки; тяжеловесна
GitHub flowmain + короткие feature-ветки + PRнепрерывная доставка веб-приложений
GitLab flowmain + окружения (staging, production) или релизные веткиокружения и контролируемые релизы
Trunk-basedодин main (trunk), очень короткие ветки (часы/1–2 дня) или прямые коммиты, feature flagsзрелый CI/CD, частые релизы, высокая автоматизация

Trunk-based development:

  • Небольшие частые интеграции в main (минимум раз в день).
  • Незавершённый код скрывается feature flags.
  • Обязательны быстрые автотесты, ревью небольших PR, защищённый main.
  • Релизы — по тегу/ветке релиза (release/1.4) от trunk.
  • Плюс: нет долгоживущих веток и «ада слияний»; минус: требует дисциплины и инфраструктуры.

Feature branches:

main:      A──B──────────────G──H
            \                /
feature/x:   C──D──E──F─────/       (PR → review → CI → squash/merge)

Соглашения по именованию: feature/ORD-123-order-filters, fix/…, hotfix/…, chore/…, release/x.y.

Защита main: обязательные ревью, зелёный CI, запрет force-push, линейная история, CODEOWNERS, подписанные коммиты (по необходимости).

Выбор зависит от: частоты релизов, размера команды, зрелости тестов и CI, необходимости поддерживать несколько версий (тогда release-ветки).

Нюансы и подводные камни

  • Git flow с develop при непрерывной доставке создаёт лишнюю сложность.
  • Долгоживущие feature-ветки накапливают конфликты и откладывают интеграцию.
  • Feature flags — тоже долг: удаляйте после выката.
  • Отсутствие быстрых тестов делает trunk-based опасным.
  • Hotfix нужно обязательно вливать во все актуальные ветки.

Практика

  1. Опишите процесс вашей команды и предложите упрощение.
  2. Настройте защиту main и шаблон PR.
  3. Внедрите feature flag для незавершённой функции.

Вопросы с ответами

Связанные темы