Рабочий процесс Gitflow Workflow

Gitflow Workflow — это модель рабочего процесса Git, которая была впервые опубликована и популяризована Винсентом Дриссеном из компании nvie. Gitflow Workflow предполагает выстраивание строгой модели ветвления с учетом выпуска проекта. Такая модель обеспечивает надежную основу для управления крупными проектами.

Gitflow идеально подходит для проектов, в которых цикл релиза протекает по графику. В этом рабочем процессе используются понятия и команды, которые были предложены в рамках процесса Feature Branch Workflow. Однако Gitflow привносит новые специфические роли для разных веток и определяет характер и частоту взаимодействия между ними. Помимо веток feature в рамках этого рабочего процесса используются отдельные ветки для подготовки, поддержки и регистрации выпусков. При этом вы по-прежнему можете пользоваться преимуществами процесса Feature Branch Workflow, такими как запросы pull, изолированные эксперименты и более эффективное командное взаимодействие.

Начало работы

Gitflow — это лишь методология работы с Git, то есть в ней определяется, какие виды веток необходимы проекту и как выполнять слияние между ними. Ниже мы познакомимся с назначением веток. Набор инструментов git-flow представляет собой отдельную командную строку, которая требует установки. Процесс установки прост. Пакеты команд git-flow доступны для многих операционных систем. В системах OSX можно выполнить команду brew install git-flow. Если вы используете Windows, вам нужно загрузить и установить git-flow. После установки git-flow необходимо выполнить команду git flow init, чтобы использовать его в проекте. Этот набор играет роль оболочки Git. Команда git flow init является расширением стандартной команды git init и не вносит изменений в ваш репозиторий помимо создания веток.

Порядок действий

Рабочий процесс Gitflow — ветки с историей проекта

Основные ветки (master) и ветки разработки (develop)

Для фиксации истории проекта в рамках этого процесса вместо одной ветки master используются две ветки. В ветке master хранится официальная история релиза, а ветка develop предназначена для объединения всех функций. Кроме того, для удобства рекомендуется присваивать всем коммитам в ветке master номер версии.

Первый шаг рабочего процесса заключается в создании ветки develop от стандартной ветки master. Разработчику будет проще создать пустую ветку develop локально и отправить ее на сервер:

 git branch develop git push -u origin develop

В этой ветке будет храниться полная история проекта, а в ветке master — сокращенная. Теперь другим разработчикам следует клонировать центральный репозиторий и создать отслеживающую ветку для ветки develop.

При использовании библиотеки расширений git-flow, для создания ветки develop можно выполнить git flow init в существующем репозитории:

 $ git flow init Initialized empty Git repository in ~/project/.git/ No branches exist yet. Base branches must be created now. Branch name for production releases: [master] Branch name for "next release" development: [develop]
How to name your supporting branch prefixes? Feature branches? [feature/] Release branches? [release/] Hotfix branches? [hotfix/] Support branches? [support/] Version tag prefix? []
$ git branch * develop master

Функциональные ветки (feature)

Под каждую новую функцию должна быть отведена собственная ветка, которую можно отправлять в центральный репозиторий для создания резервной копии или совместной работы команды. Ветки feature создаются не на основе master, а на основе develop. Когда работа над функцией завершается, соответствующая ветка сливается обратно с веткой develop. Функции не следует отправлять напрямую в ветку master.

Рабочий процесс Gitflow — функциональные ветки

Обратите внимание, что объединение веток feature с веткой develop во всех отношениях совершается по модели Feature Branch Workflow. Но работа по Gitflow Workflow на этом не заканчивается.

Как правило, ветки feature создаются на основе последней ветки develop.

Создание функциональной ветки

Без использования расширений git-flow:

 git checkout develop git checkout -b feature_branch 

С использованием расширений git-flow:

git flow feature start feature_branch

Продолжайте работу с Git как обычно.

Окончание работы с функциональной веткой

По завершении работы над функцией следует объединить ветку feature_branch с develop.

Без использования расширений git-flow:

git checkout develop git merge feature_branch

С использованием расширений git-flow:

git flow feature finish feature_branch

Ветки выпуска (release)

Рабочий процесс Gitflow — ветки выпуска

Когда в ветке develop оказывается достаточно функций для выпуска (или приближается назначенная дата выпуска), от ветки develop создается ветка release. Создание этой ветки запускает следующий цикл выпуска, и с этого момента новые функции добавить больше нельзя — допускается лишь отладка багов, создание документации и решение других задач, связанных с выпуском. Когда подготовка к поставке завершается, ветка release сливается с master и ей присваивается номер версии. Кроме того, для нее нужно выполнить слияние с веткой develop, в которой с момента создания ветки релиза могли возникнуть изменения.

Благодаря тому, что для подготовки выпусков используется специальная ветка, одна команда может дорабатывать текущий выпуск, в то время как другая команда продолжает работу над функциями для следующего. Это также позволяет разграничить этапы разработки (например, можно без труда посвятить неделю подготовке к версии 4.0 и действительно увидеть это в структуре репозитория).

Создание веток release — это еще одна простая операция ветвления. Как и ветки feature, ветки release основаны на ветке develop. Создать новую ветку release можно с помощью следующих команд.

Без использования расширений git-flow:

git checkout develop git checkout -b release/0.1.0

При использовании расширений git-flow:

$ git flow release start 0.1.0 Switched to a new branch 'release/0.1.0'

Когда релиз готов к отправке, он сливается в master и develop, а ветка release удаляется. Важно влить ее обратно в ветку develop, поскольку в ветку release могут быть добавлены критические обновления, и они должны быть доступны для новых функций. Если в вашей организации уделяют повышенное внимание проверке кода, это идеальное место для осуществления запроса pull.

Для завершения работы на ветке release используйте следующие команды:

Без использования расширений git-flow:

 git checkout master git merge release/0.1.0

Или при использовании расширений git-flow:

 git flow release finish '0.1.0'

Ветки исправления (hotfix)

Рабочий процесс Gitflow — ветки исправления

Ветки поддержки или ветки hotfix используются для быстрого внесения исправлений в рабочие релизы. Ветки hotfix очень похожи на ветки release и feature, за исключением того, что они создаются от master, а не от develop. Это единственная ветка, которая должна быть создана непосредственно от master. Как только исправление завершено, ветку следует объединить с master и develop (или текущей веткой release), а ветка master должна быть помечена обновленным номером версии.

Наличие специальной ветки для исправления ошибок позволяет команде решать проблемы, не прерывая остальную часть рабочего процесса и не ожидая следующего цикла релиза. Ветки поддержки можно рассматривать как специальные ветки release, которые работают непосредственно с master. Ветку hotfix можно создать с помощью следующих команд:

Без использования расширений git-flow:

 git checkout master git checkout -b hotfix_branch

При использовании расширений git-flow:

 $ git flow hotfix start hotfix_branch

По завершении работы ветка hotfix, так же как и в случае с веткой release, объединяется с master и develop.

 git checkout master git merge hotfix_branch git checkout develop git merge hotfix_branch git branch -D hotfix_branch
 $ git flow hotfix finish hotfix_branch

Пример

Далее продемонстрирован полный цикл работы с функциональной веткой (предположим, что у нас есть репозиторий с веткой master).

git checkout master
git checkout -b develop
git checkout -b feature_branch
# work happens on feature branch
git checkout develop
git merge feature_branch
git checkout master
git merge develop
git branch -d feature_branch

Помимо работы с ветками feature и release, продемонстрируем работу с веткой hotfix:

 git checkout master git checkout -b hotfix_branch # идет работа, в hotfix_branch добавляются коммиты git checkout develop git merge hotfix_branch git checkout master git merge hotfix_branch

Резюме

В этой статье мы рассмотрели модель работы Gitflow Workflow. Gitflow —это одна из многих методологий работы с Git, которые вы и ваша команда можете использовать.

Ключевые идеи, которые нужно запомнить о Gitflow:

  • Данная модель отлично подходит для организации рабочего процесса на основе релизов.
  • Работа по модели Gitflow включает создание отдельной ветки для исправлений ошибок в рабочей среде.

Последовательность действий при работе по модели Gitflow:

  1. Из ветки master создается ветка develop.
  2. Из ветки develop создается ветка release.
  3. Из ветки develop создаются ветки feature.
  4. Когда работа над веткой feature завершена, она сливается с веткой develop.
  5. Когда работа над веткой релиза release завершена, она сливается в ветки develop и master.
  6. Если в master обнаружена проблема, из master создается ветка hotfix.
  7. Когда работа над веткой исправления hotfix завершена, она сливается в ветки develop и master.

Рекомендуем продолжить обучение знакомством с моделью Forking Workflow. Или посетите нашу страницу сравнения рабочих процессов.

Готовы изучить Git?

Попробуйте это интерактивное учебное руководство.

Начните прямо сейчас