Skip to content

Instantly share code, notes, and snippets.

@asqd
Created September 26, 2017 14:56
Show Gist options
  • Save asqd/17527bdc65f05c72c23e93f63e0e6b95 to your computer and use it in GitHub Desktop.
Save asqd/17527bdc65f05c72c23e93f63e0e6b95 to your computer and use it in GitHub Desktop.
GitFlow

GitFlow

Идея

Главный репозиторий всегда содержит две главные ветки:

  • master - главная ветка для продакшена. Содержит только готовые релизы.
  • develop - главная ветка для разработки.

Когда код в ветке develop готов к релизу, то все изменения вливаются в ветку master и помечаются номером релиза.

Вспомогательные ветки:

  • featured branches содержат новый функционал приложения
  • release branches для подготовки релизов
  • hotfix brances для быстрого исправления ошибок в продакшене

Featured branches (Фичи)

Порождаются от develop

Вливаются в develop

Название веток любое, кроме master, develop, release-* или hotfix-*

Featured branches используют для разработки новых функций, которые войдут в текущий или будущие релизы приложения. В начале работы над веткой мы можем не знать в какой релиз она войдет.

Когда разработка фичи завершена, ветка вливается в develop или удаляется, если фича была неудачной.

Обычно ветки с фичами создаются и живут в локальном репозитории разработчика.

Как это работает

В начале работы над новой фичей создается ветка от develop.

Когда фича завершена, ветка вливается обратно в develop и попадает в следующий релиз.

Release branches

Порождаются от develop

Вливаются в develop и master

Название ветки release-*

Ветки релизов нужны для подготовки к выпуску новых версий программы. Они позволяют протестировать и исправить ошибки в ветке перед слиянем в master.

Новая ветка релиза созается, когда функционал develop ветки почти соответствует новому релизу. Функционал для следующих релизов в неё не включается.

Номер версии определяется в момент создания релизной ветки.

Как это работает

Ветка релиза создается от develop и живет пока релиз не будет готов к выпуску. После создания релизной ветки все ветки исправлений вливаются в неё, а не в develop. Все новые фичи ждут нового релиза и не попадают в текущий.

Когда мы решили, что ветка релиза готова и все ошибки исправлены, то она сливается в master. Коммит помечается версией релиза. Все изменения в ветке релиза также добавляются в develop, чтобы она содержала исправления ошибок.

Hotfix branches (Ветки правок)

Порождаются от master

Вливаются в develop и master

Название ветки hotfix-*

Ветки правок нужны для быстрого исправления ошибок в продакшене. Когда в продакшен версии возникают критические ошибки, от master ветки создается новая ветвь и в ней идет работа над исправлением ошибки.

Как это работает

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

Примечание: Если в момент обнаружения ошибки существует ветвь релиза, то ветка с исправлениями должна вливаться в неё, а не в develop. Правки войдут в develop позже, вместе с веткой релиза.

git-flow

Установка

OSX

brew install git-flow-avh

Инициализация

Внутри своего git репозитория выполнить

git flow init

Фичи

Новая фича начинается с ветки develop.

git flow feature start SERP-*

* - номер задачи в JIRA

Команда создает новую ветку фичи и переключается на неё.

После завершения фичи выполняем

git flow feature finish SERP-*

Происходит слияние ветки в develop, удаляется ветка с фичей, переключаемся на develop.

Публикуем фичу в репозитории, чтобы её смогли забрать коллеги:

git flow feature publish SERP-*

Получить фичу из origin

git flow feature pull origin SERP-*

Релизы

Команда

git flow release start <как будем релизы называть?>

Создает ветку релиза от develop.

Публикуем ветку в origin git flow release publish ###

Завершение релиза

Команда

git flow release finish ###
  • Сливает ветку релиза в master
  • Отмечает релиз тегом по его имени
  • Сливает ветку в develop
  • Удаляет ветку релиза

Исправления

Создаем исправление

git flow hotfix start VERSION [BASENAME]

VERSION - имя нового, исправленного релиза BASENAME - опционально, коммит, от которого создаем ветку

Завершение исправления

Команда

git flow hotfix finish VERSION

Сливаем ветку в develop и master. Коммит в master отмечается тегом с версией исправления.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment