Рабочий процесс 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
и не вносит изменений в ваш репозиторий помимо создания веток.
Порядок действий
Основные ветки (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
.
Обратите внимание, что объединение веток 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)
Когда в ветке 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)
Ветки поддержки или ветки 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
# work is done commits are added to the hotfix_branch
git checkout develop
git merge hotfix_branch
git checkout master
git merge hotfix_branch
Резюме
В этой статье мы рассмотрели модель работы Gitflow Workflow. Gitflow —это одна из многих методологий работы с Git, которые вы и ваша команда можете использовать.
Ключевые идеи, которые нужно запомнить о Gitflow:
- Данная модель отлично подходит для организации рабочего процесса на основе релизов.
- Работа по модели Gitflow включает создание отдельной ветки для исправлений ошибок в рабочей среде.
Последовательность действий при работе по модели Gitflow:
- Из ветки
master
создается веткаdevelop
. - Из ветки
develop
создается веткаrelease
. - Из ветки
develop
создаются веткиfeature
. - Когда работа над веткой
feature
завершена, она сливается с веткойdevelop
. - Когда работа над веткой релиза
release
завершена, она сливается в веткиdevelop
иmaster
. - Если в
master
обнаружена проблема, изmaster
создается веткаhotfix
. - Когда работа над веткой исправления
hotfix
завершена, она сливается в веткиdevelop
иmaster
.
Рекомендуем продолжить обучение знакомством с моделью Forking Workflow. Или посетите нашу страницу сравнения рабочих процессов.