15 января 2016, г. Москва
Сергей Максимов
Старший программист группы Java-сервисов
Git Flow – процесс
управления
конфигурацией проектов
СОДЕРЖАНИЕ
 Наши ценности
 Git – это DVCS
– Сравнение с Subversion
– Сравнение с Mercurial
 Состав хранилища Git
 Сценарии использования GitFlow
– Текущая разработка
– Стабилизация (Feature
Freeze)
– Релиз (Code Freeze)
– Заплатки (Hot fixing)
 Запросы на слияние (GitLab)
– Code Review
– Pre-build
 Особенности Git
– Флаг --no-ff
– Удаление временных веток
– Настройка прав на уровне
веток
– rebase / merge
Наши ценности
Extreme
Programming (XP)Agile
• http://agilemanifesto.org/
• http://www.extremeprogramming.org/
 Коллективное владение кодом
– Ревью кода коллегами
 Непрерывная интеграция
– Автоматическое
тестирование
– Стандарты кодирования
 Частые выпуски версий
Git Flow -- процесс управления конфигурацией проектов 3
Git
Git Flow -- процесс управления конфигурацией проектов 4
Git – распределённая система контроля
версий (DVCS)
5
• был создан Линусом Торвальдсом для управления разработкой ядра Linux
• первая версия выпущена 7 апреля 2005 года
Децентрализац
ия
Локальные
ветки
Управление
правами
Git + + +
Mercurial + - -
Subversion - - -
Git Flow -- процесс управления конфигурацией проектов
Состав хранилища Git
6
Постоянные ветки:
• master – история релизов
• develop – ветвь текущей
разработки (pre-stable)
Временные ветки:
• feature – работа над новой
функциональностью (non-
stable)
• release – стабилизация
• hotfix – заплатки
Git Flow -- процесс управления конфигурацией проектов
Варианты использования Git Flow
Текущая разработка
7
• Порождаются от develop
• Вливаются в develop
• В именовании удобно использовать ID задачи Jira,
например, dev_jadm-445
• В момент публикации кода в ветку develop
• Функциональность не содержит критичных (нарушающих
работу продукта в целом) багов
• Функциональность готова к тестированию QA
• Пройден статический анализ кода
• Пройден ревью коллегами
• Проведен прогон тестов
Git Flow -- процесс управления конфигурацией проектов
Варианты использования Git Flow
Стабилизация и релиз (Feature / Code Freeze)
8
• Порождаются от develop
• Вливаются в develop, master
• В именовании используется префикс
release_, например, release_2.1
• В ветку release не публикуется новая
функциональность, только исправления
ошибок
• При публикации из release в master
проставляется метка с номером релизной
версии
Git Flow -- процесс управления конфигурацией проектов
Варианты использования Git Flow
Заплатки (Hot fixing)
9
• Порождаются от master
• Вливаются в develop, master
• В именовании используется префикс
hotfix_, например, hotfix_1.2
• В ветку hotfix не публикуется новая
функциональность, только исправления
ошибок
• При публикации из hotfix в master
проставляется метка с номером новой
релизной версии
Git Flow -- процесс управления конфигурацией проектов
GitLab
Git Flow -- процесс управления конфигурацией проектов 10
GitLab – система управления хранилищами Git
11Git Flow -- процесс управления конфигурацией проектов
http://gitlab.moex.com/
Запросы на слияние (Merge Requests)
Git Flow -- процесс управления конфигурацией проектов 12
Возможности:
1. Code review
2. Pre-Merge
Build
3. Jira
интеграция
4. Confluence
интеграция?
Запрос на слияние c develop. Критерии
приёмки (пример)
Git Flow -- процесс управления конфигурацией проектов 13
1. (Н) Код не содержит критических
ошибок, нарушающих работу продукта в
целом
2. (Н) Функциональность готова для
тестирования
3. (Ф) Пройден Code Review
4. (Ф) Пройдены автоматические тесты
5. (Ф) Не нарушен порог качества для
статического и стилевого анализа кода
6. (Ф) Покрытие кода тестами сохранено
на приемлемом уровне
Н – неформальный критерий
Ф – формальный критерий
Особенности Git
Git Flow -- процесс управления конфигурацией проектов 14
Особенности Git. Флаг no-ff
Git Flow -- процесс управления конфигурацией проектов 15
• Флаг no-ff вынуждает Git всегда
создавать объект коммита при
слиянии
• Позволяет сгруппировать несколько
коммитов (feature ветка будет
удалена)
• Может образоваться некоторое
количество пустых объектов коммитов
Особенности Git. Настройка прав и удаление
временных веток
Git Flow -- процесс управления конфигурацией проектов 16
• Временные ветки (feature, release,
hotfix) удаляются после слияния с
ветками назначения (develop и/или
master)
• Прямой push в ветки master, develop
должен быть запрещён
• Вместо push для веток master, develop
используется механизм Merge Request
Особенности Git. Rebase vs Merge
Git Flow -- процесс управления конфигурацией проектов 17
• Rebase
• позволяет линеаризовать историю изменений
• меняет контекст, в котором были сделаны
коммиты
• теряет информацию о слияниях веток
• Merge
• не изменяет контекст коммитов
• сохраняет информацию о слияниях веток
• создаёт дополнительные коммиты
• git bisect адекватно работает как с
линейной (rebase), так и с нелинейной
(merge) историей
• Проблемы с rebase
http://habrahabr.ru/post/179123/
• Руководство по rebase
http://habrahabr.ru/post/161009/
Благодарю за
внимание!
Git Flow -- процесс управления конфигурацией проектов 18
Вопросы…
Список для чтения
Git Flow -- процесс управления конфигурацией проектов 19
Тема Источник
Agile Manifesto http://agilemanifesto.org/
Extreme
Programming
http://www.extremeprogramming.org/
Git SCM https://git-scm.com/
Git Flow http://habrahabr.ru/post/106912/
GitLab https://about.gitlab.com/
Rebase problems http://habrahabr.ru/post/179123/
Rebase how-to http://habrahabr.ru/post/161009/

GitFlow_MOEX

  • 1.
    15 января 2016,г. Москва Сергей Максимов Старший программист группы Java-сервисов Git Flow – процесс управления конфигурацией проектов
  • 2.
    СОДЕРЖАНИЕ  Наши ценности Git – это DVCS – Сравнение с Subversion – Сравнение с Mercurial  Состав хранилища Git  Сценарии использования GitFlow – Текущая разработка – Стабилизация (Feature Freeze) – Релиз (Code Freeze) – Заплатки (Hot fixing)  Запросы на слияние (GitLab) – Code Review – Pre-build  Особенности Git – Флаг --no-ff – Удаление временных веток – Настройка прав на уровне веток – rebase / merge
  • 3.
    Наши ценности Extreme Programming (XP)Agile •http://agilemanifesto.org/ • http://www.extremeprogramming.org/  Коллективное владение кодом – Ревью кода коллегами  Непрерывная интеграция – Автоматическое тестирование – Стандарты кодирования  Частые выпуски версий Git Flow -- процесс управления конфигурацией проектов 3
  • 4.
    Git Git Flow --процесс управления конфигурацией проектов 4
  • 5.
    Git – распределённаясистема контроля версий (DVCS) 5 • был создан Линусом Торвальдсом для управления разработкой ядра Linux • первая версия выпущена 7 апреля 2005 года Децентрализац ия Локальные ветки Управление правами Git + + + Mercurial + - - Subversion - - - Git Flow -- процесс управления конфигурацией проектов
  • 6.
    Состав хранилища Git 6 Постоянныеветки: • master – история релизов • develop – ветвь текущей разработки (pre-stable) Временные ветки: • feature – работа над новой функциональностью (non- stable) • release – стабилизация • hotfix – заплатки Git Flow -- процесс управления конфигурацией проектов
  • 7.
    Варианты использования GitFlow Текущая разработка 7 • Порождаются от develop • Вливаются в develop • В именовании удобно использовать ID задачи Jira, например, dev_jadm-445 • В момент публикации кода в ветку develop • Функциональность не содержит критичных (нарушающих работу продукта в целом) багов • Функциональность готова к тестированию QA • Пройден статический анализ кода • Пройден ревью коллегами • Проведен прогон тестов Git Flow -- процесс управления конфигурацией проектов
  • 8.
    Варианты использования GitFlow Стабилизация и релиз (Feature / Code Freeze) 8 • Порождаются от develop • Вливаются в develop, master • В именовании используется префикс release_, например, release_2.1 • В ветку release не публикуется новая функциональность, только исправления ошибок • При публикации из release в master проставляется метка с номером релизной версии Git Flow -- процесс управления конфигурацией проектов
  • 9.
    Варианты использования GitFlow Заплатки (Hot fixing) 9 • Порождаются от master • Вливаются в develop, master • В именовании используется префикс hotfix_, например, hotfix_1.2 • В ветку hotfix не публикуется новая функциональность, только исправления ошибок • При публикации из hotfix в master проставляется метка с номером новой релизной версии Git Flow -- процесс управления конфигурацией проектов
  • 10.
    GitLab Git Flow --процесс управления конфигурацией проектов 10
  • 11.
    GitLab – системауправления хранилищами Git 11Git Flow -- процесс управления конфигурацией проектов http://gitlab.moex.com/
  • 12.
    Запросы на слияние(Merge Requests) Git Flow -- процесс управления конфигурацией проектов 12 Возможности: 1. Code review 2. Pre-Merge Build 3. Jira интеграция 4. Confluence интеграция?
  • 13.
    Запрос на слияниеc develop. Критерии приёмки (пример) Git Flow -- процесс управления конфигурацией проектов 13 1. (Н) Код не содержит критических ошибок, нарушающих работу продукта в целом 2. (Н) Функциональность готова для тестирования 3. (Ф) Пройден Code Review 4. (Ф) Пройдены автоматические тесты 5. (Ф) Не нарушен порог качества для статического и стилевого анализа кода 6. (Ф) Покрытие кода тестами сохранено на приемлемом уровне Н – неформальный критерий Ф – формальный критерий
  • 14.
    Особенности Git Git Flow-- процесс управления конфигурацией проектов 14
  • 15.
    Особенности Git. Флагno-ff Git Flow -- процесс управления конфигурацией проектов 15 • Флаг no-ff вынуждает Git всегда создавать объект коммита при слиянии • Позволяет сгруппировать несколько коммитов (feature ветка будет удалена) • Может образоваться некоторое количество пустых объектов коммитов
  • 16.
    Особенности Git. Настройкаправ и удаление временных веток Git Flow -- процесс управления конфигурацией проектов 16 • Временные ветки (feature, release, hotfix) удаляются после слияния с ветками назначения (develop и/или master) • Прямой push в ветки master, develop должен быть запрещён • Вместо push для веток master, develop используется механизм Merge Request
  • 17.
    Особенности Git. Rebasevs Merge Git Flow -- процесс управления конфигурацией проектов 17 • Rebase • позволяет линеаризовать историю изменений • меняет контекст, в котором были сделаны коммиты • теряет информацию о слияниях веток • Merge • не изменяет контекст коммитов • сохраняет информацию о слияниях веток • создаёт дополнительные коммиты • git bisect адекватно работает как с линейной (rebase), так и с нелинейной (merge) историей • Проблемы с rebase http://habrahabr.ru/post/179123/ • Руководство по rebase http://habrahabr.ru/post/161009/
  • 18.
    Благодарю за внимание! Git Flow-- процесс управления конфигурацией проектов 18 Вопросы…
  • 19.
    Список для чтения GitFlow -- процесс управления конфигурацией проектов 19 Тема Источник Agile Manifesto http://agilemanifesto.org/ Extreme Programming http://www.extremeprogramming.org/ Git SCM https://git-scm.com/ Git Flow http://habrahabr.ru/post/106912/ GitLab https://about.gitlab.com/ Rebase problems http://habrahabr.ru/post/179123/ Rebase how-to http://habrahabr.ru/post/161009/