Git Workflows: GitFlow, GitHub Flow, Trunk-based
Сам Git не диктует как организовать ветки. Команды придумали несколько подходов. Разберём три самых распространённых.
GitFlow
Придуман Винсентом Дриссеном в 2010-м. Подходит для продуктов с чёткими версиями и редкими релизами.
Постоянные ветки:
main— только стабильные релизы с тегамиdevelop— основная разработка, интеграция фич
Временные ветки:
feature/*— новые функции (отходят отdevelop)release/*— подготовка релиза (тестирование, bugfix)hotfix/*— срочный фикс прямо вmain
main: ●────────────────────●──────────●
\ / hotfix /
develop: ●──●──●──●────────●──────────●
\ \ /
feature: ●───● release
●──●
Плюсы: чёткая структура, параллельные релизы, изоляция фич
Минусы: сложно, много веток, долгий цикл доставки
Когда: библиотеки, мобильные приложения с App Store, enterprise с релиз-циклами
GitHub Flow
Упрощённый вариант. Только две концепции: main и feature-ветки через PR.
main: ●───────────────────────────●──────●
\ PR merged / \ PR
feature: ●──●──●──●────────────── ●──●
Процесс:
- Создай ветку от
main - Делай коммиты
- Открой Pull Request
- Код ревью
- Merge в
main→ деплой
Плюсы: простота, быстрая доставка, хорошо для CI/CD
Минусы: нет явного разделения релизов, main должна быть всегда готова к деплою
Когда: веб-приложения, SaaS, команды с CI/CD
Trunk-based Development
Все разработчики коммитят в main (trunk) напрямую или через короткоживущие ветки (≤2 дней).
main: ●──●──●──●──●──●──●──●──●──●
↑ ↑ ↑ ↑ ↑
все разработчики
Незаконченные фичи скрываются за feature flags:
if (featureFlags.newCheckout) {
return <NewCheckout />
}
return <OldCheckout />Плюсы: нет merge hell, непрерывная интеграция, быстрые циклы
Минусы: нужны развитый CI/CD, feature flags, культура маленьких коммитов
Когда: большие команды (Google, Facebook), зрелый DevOps
Попробуй в симуляции
Посмотри как выглядит граф коммитов для каждого подхода и переключись между ними.
Сравнение
| GitFlow | GitHub Flow | Trunk-based | |
|---|---|---|---|
| Постоянных веток | 2 (main + develop) | 1 (main) | 1 (main) |
| Время жизни фич-ветки | Недели | Дни | Часы/дни |
| Релизы | По расписанию | При каждом merge | Continuous |
| Сложность | Высокая | Низкая | Средняя |
| CI/CD требования | Низкие | Средние | Высокие |
Как выбрать
GitFlow — если:
- Поддерживаешь несколько версий одновременно
- Релизы раз в месяц и реже
- Нужна долгая стабилизация перед релизом
GitHub Flow — если:
- Деплоишь несколько раз в день
- Одна активная версия
- Небольшая команда
Trunk-based — если:
- Большая команда (10+ разработчиков)
- Отличный CI/CD с быстрыми тестами
- Готовы к feature flags