Git Flow
Git flow - это популярная методология ветвления и слияния, которая описывает несколько веток для разработки, релизов и взаимодействия между ними.
Схематично Git flow выглядит так:
Основные принципы
Основные идеи Git Flow состоят в том, что существует несколько типов веток:
- главные (
master
иdevelop
) - существуют всё время. - вспомогательные (
feature
,release
иhotfix
) - используются для распараллеливания разработки между членами команды. Всегда имеют ограниченный срок жизни - каждая из них в итоге удаляется.
Подробнее о ветках:
master
. Дефолтная ветка знакомая каждому, кто работал с гитом. Она всегда содержит стабильный код. Код, попадая в нее, образует очередной релиз.develop
. Создаётся параллельно веткеmaster
и является главной ветвью для разработки. Хранящийся в ней код в любой момент времени должен содержать самые последние изданные изменения, необходимые для следующего релиза. Когда исходный код в этой ветке достигает стабильного состояния и готов к релизу, все изменения должны быть определённым способом (при помощи веткиrelease
) влиты в главную ветвь (master
) и помечены тегом с номером релиза.feature
. Ответвляются от веткиdevelop
. Используются для разработки новых функций, которые должны появиться в текущем или будущем релизах, т.е. заранее неизвестно в какой из релизов они попадут. Когда работа в ветке завершена, она вливается обратно вdevelop
и удаляется. При неудавшемся эксперименте ветка удаляется без вливания куда-либо.release
. Ответвляются от веткиdevelop
, имена должны присваиваться по типуrelease-*
. Используются для подготовки к выпуску новых версий продукта, т.е. здесь осуществляются небольшие исправления, подготавливается информация для релиза (номер версии, дата сборки и т.д.). Когда вся эта работа завершена, ветка вливается вdevelop
иmaster
.hotfix
. Ответвляются от веткиmaster
, имена должны присваиваться по типуhotfix-*
. Данные ветки порождаются необходимостью немедленно исправить какие-либо ошибки или неправильную работу функционала в текущем релизе. Когда баг исправлен, изменения надо влить обратно вmaster
, а также в ветвьdevelop
, чтобы гарантировать, что это исправление окажется и в следующем релизе.
Плюсы и минусы
Плюсы:
- Git Flow используется многими распределенными командами, в т.ч. и open source команды, которые имеют разные уровни квалификации. Сопровождающие проекта могут проводить код ревью и утверждать каждую строку кода в релизы.
- Git Flow хорошо подходит для “традиционной модели релизов”, где релизы делаются раз в месяц или раз в пару недель.
- Git Flow также хорошо работает при работе с установленным продуктом или несколькими версиями в производстве.
Минусы:
- Git Flow может замедлять работу, когда приходится ревьювить большие пулл реквесты, когда вы пытаетесь выполнить итерацию быстро.
- Релизы сложно делать чаще, чем раз в неделю.
- Большие функции могут потратить дни на мерж и резолв конфликтов и форсировать несколько циклов тестирования.
- История проекта в гите имеет кучу merge commits и затрудняет просмотр реальной работы.
- Может быть проблематичным в CI/CD сценариях.
git-flow (AVH Edition)
Существует специальный инструмент, который облегчает работу с методологией Git Flow - gitflow-avh. Включает в себя коллекцию расширений для git, которая помогает избежать многих повторяющихся операций.
start
- создаёт ветку (feature, release или hotfix).finish
- сливает ветку вdevelop
и/илиmaster
.publish
- публикация ветки на удалённом сервере.pull
- получение ветки, которую опубликовал другой пользователь.
Полезные ссылки
Branching стратегии в Git - статья о нескольких методологиях ветвления (Git flow, Github flow, GitLab flow, Trunk Based Development).
Удачная модель ветвления для Git - плюсы Git Flow.
Пожалуйста, перестаньте рекомендовать Git Flow - минусы Git Flow.
Шпаргалка по git-flow-avh - информация о том как начать использовать gitflow-avh.