Статьи Git Flow
Post
Cancel

Git Flow

Git flow - это популярная методология ветвления и слияния, которая описывает несколько веток для разработки, релизов и взаимодействия между ними.

Схематично Git flow выглядит так:

git-flow-model


Основные принципы

Основные идеи 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, которая помогает избежать многих повторяющихся операций.

Основные команды: git-flow-command

  • 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.

This post is licensed under CC BY 4.0 by the author.