DevOps & CI/CD

Git Flow

Модель ветвления с долгоживущими ветками develop и release — и её главная альтернатива, trunk-based development.

Что такое Git Flow

Git Flow (gitflow) — модель ветвления в Git, описанная Винсентом Дриссеном в 2010 году. Она задаёт строгий набор веток и правил: какая от какой создаётся, куда вливается и когда удаляется.

Сам Git никаких моделей не навязывает — он даёт только ветки. Git Flow, GitHub Flow и trunk-based development отвечают на вопрос «как командой этими ветками пользоваться, чтобы не мешать друг другу».

Ветки Git Flow

Ветка Живёт Откуда Куда вливается
main (master) Вечно Только релизы, каждый коммит помечен тегом
develop Вечно main Основная ветка интеграции
feature/* Дни-недели develop develop
release/* Дни develop main и develop
hotfix/* Часы main main и develop
main     ──●─────────────────●──────────●──   (v1.0, v1.1, v1.1.1)
            \               / \        /
release      \         ●───●   \      /       (стабилизация)
              \       /         \    /
develop  ──●───●─────●───────────●──●─────
            \ /       \             /
feature      ●         ●───────────●         (разработка)

Ключевая идея: main всегда содержит ровно то, что стоит в production; вся текущая работа идёт в develop; релиз стабилизируется в отдельной ветке, не блокируя разработку.

git switch -c feature/auth develop     # начать фичу
git switch develop && git merge --no-ff feature/auth

git switch -c release/1.2 develop      # начать релиз
git switch main && git merge --no-ff release/1.2
git tag -a v1.2 -m "release 1.2"
git switch develop && git merge --no-ff release/1.2   # не забыть вернуть фиксы

Что такое trunk-based development

Trunk-based development — противоположный подход: одна главная ветка (trunk, обычно main), в которую все вливаются напрямую или через короткоживущие ветки в пределах одного-двух дней. Никаких develop и release.

Как это работает без хаоса:

  • ветки живут часы, а не недели — конфликты не успевают вырасти;
  • каждый merge проходит CI: красная сборка не вливается;
  • незаконченная функциональность прячется за feature flag и уезжает в prod выключенной;
  • релиз — это тег на main или просто выкатка текущего main.

Именно эта модель делает возможным Continuous Deployment: деплоить несколько раз в день из develop с недельными релизными ветками невозможно.

Git Flow vs trunk-based

Git Flow Trunk-based
Долгоживущие ветки main, develop, release Только main
Время жизни ветки фичи Недели Часы, до 1–2 дней
Частота релизов Раз в недели/месяц Несколько раз в день
Конфликты слияния Крупные и болезненные Мелкие и частые
Незавершённый код В ветке В main за feature flag
Требования к тестам Умеренные Высокие, CI обязателен
Кому подходит Версионируемые продукты, коробочный софт, несколько поддерживаемых версий SaaS, веб-сервисы, одна версия в prod

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

GitHub Flow — компромисс

Промежуточный вариант, самый распространённый на практике: одна ветка main + ветка на задачу + pull request с code review + автодеплой после слияния.

git switch -c fix/timeout main
git push -u origin fix/timeout
# → pull request → CI → review → merge → автодеплой

От trunk-based отличается обязательным PR как воротами, от Git Flow — отсутствием develop и release.

Что выбрать

Смотрите на частоту релизов. Выкатываете несколько раз в день — trunk-based или GitHub Flow. Выпускаете версии, которые поддерживаете параллельно (v2.3 у одних клиентов, v3.0 у других), — Git Flow оправдан. Промежуточный признак: если ветка фичи живёт дольше недели и её слияние вызывает страх — модель уже не работает.

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

  • Git — ветки, merge и всё остальное
  • git rebase — чем причёсывают ветку перед слиянием
  • Команды Git — базовые операции
  • CI/CD — без него trunk-based невозможен
  • Code review — ворота перед merge
  • Стратегии деплоя — что происходит после слияния

Готовы запустить GPU-задачу?

Запустить GPU-сервер