SlideShare a Scribd company logo
Git-flow культура
Предпосылки
2
•Каждая команда, на сегодняшний день, использует Git-flow
•Часто встречаются ситуации когда появляются те или иные
проблемы из-за незнания инструментов
•Все его используют, но не всегда представляют как с ним
работать
О чем сегодня пойдет речь
3
•Git-flow
•Преимущества
•Проблемы
•Инструменты используемые в работе
•Merge
•Rebase
•Cherry-pick
•Stash
•Автоматизируем работу при помощи CI-систем
Что такое ветка в Git?
4
Что такое ветка в Git?
5
Что такое ветка в Git?
6
Что же такое Git-Flow?
7
8
master
Что же такое Git-Flow?
9
master
develop
Что же такое Git-Flow?
10
master
develop
feature
Что же такое Git-Flow?
11
master
develop
feature
Что же такое Git-Flow?
12
master
develop
feature
Что же такое Git-Flow?
13
master
develop
feature
Что же такое Git-Flow?
14
master
develop
feature
Release
Что же такое Git-Flow?
15
master
develop
feature
Release
Что же такое Git-Flow?
16
master
develop
feature
Release
tag 0,1
Что же такое Git-Flow?
17
master
develop
feature
Release
tag 0,1
Hotfix
Что же такое Git-Flow?
18
master
develop
feature
Release
tag 0,1
Hotfix
tag 0,2
Что же такое Git-Flow?
Преимущества такого подхода
19
•Легко отследить историю проекта
•Вся работа разделена на тематические ветки
•Очень гибкий подход, позволяющий расширять набор веток и
правил для больших команд
Проблемы
20
Проблемы
21
•Разработчики держат на вооружении команду merge для
получения изменений из любой ветки
Проблемы
22
•Разработчики держат на вооружении команду merge для
получения изменений из любой ветки
tag 0,1 tag 0,2 tag 0,3
22
Проблемы
•Разработчики держат на вооружении команду merge для
получения изменений из любой ветки
23
tag 0,1 tag 0,2 tag 0,3
Проблемы
24
•Разработчики держат на вооружении команду merge для
получения изменений из любой ветки
tag 0,1 tag 0,2 tag 0,3
Проблемы
25
•Разработчики держат на вооружении команду merge для
получения изменений из любой ветки
•Если в команде используется код-ревью, то порой тянут с
проверкой, поскольку боятся использовать команду stash
Проблемы
26
•Разработчики держат на вооружении команду merge для
получения изменений из любой ветки
•Если в команде используется код-ревью, то порой тянут с
проверкой, поскольку боятся использовать команду stash
•Подход разрабатывался как решение для собственных проектов
Merge
27
28
develop
feature
Merge, трехстороннее слияние
29
develop
feature
git checkout develop
Merge, трехстороннее слияние
30
develop
feature
git checkout develop
git merge feature
Merge, трехстороннее слияние
31
develop
feature
git checkout develop
git merge feature
1. Поиск общего предка
Merge, трехстороннее слияние
32
develop
feature
git checkout develop
git merge feature
1. Поиск общего предка
2. Поиск блоков изменившихся в обеих
версиях
Merge, трехстороннее слияние
33
develop
feature
git checkout develop
git merge feature
1. Поиск общего предка
2. Поиск блоков изменившихся в обеих
версиях
3. Запись блоков оставшихся без
изменений
Merge, трехстороннее слияние
34
develop
feature
git checkout develop
git merge feature
1. Поиск общего предка
2. Поиск блоков изменившихся в обеих
версиях
3. Запись блоков оставшихся без
изменений
4. Блоки измененные только в одном из
потомков записываются как
измененные
Merge, трехстороннее слияние
35
develop
feature
git checkout develop
git merge feature
1. Поиск общего предка
2. Поиск блоков изменившихся в обеих
версиях
3. Запись блоков оставшихся без
изменений
4. Блоки измененные только в одном из
потомков записываются как
измененные
5. Блоки, измененные в обоих потомках
записываются только если изменения
идентичны, иначе — конфликт
Merge, трехстороннее слияние
Merge, трехстороннее слияние
36
develop
feature
git checkout develop
git merge feature
1. Поиск общего предка
2. Поиск блоков изменившихся в обеих
версиях
3. Запись блоков оставшихся без
изменений
4. Блоки измененные только в одном из
потомков записываются как
измененные
5. Блоки, измененные в обоих потомках
записываются только если изменения
идентичны, иначе — конфликт
6. Коммит!
Merge, перемотка
37
develop
hotfix
Merge, перемотка
38
develop
hotfix
git checkout develop
Merge, перемотка
39
develop
git checkout develop
git merge hotfix
Rebase
40
Rebase
41
develop
feature
A B
C D E
Rebase
42
develop
feature
A B
C D E
git rebase develop
1. Поиск общего предка
Rebase
43
develop
feature
A B
C D E
git rebase develop
1. Поиск общего предка
2. Двигаясь к HEAD вычисляется разница
каждого коммита
Rebase
44
develop
feature
A B
C D E
git rebase develop
1. Поиск общего предка
2. Двигаясь к HEAD вычисляется разница
каждого коммита
𝛥AC
Rebase
45
develop
feature
A B
C D E
git rebase develop
1. Поиск общего предка
2. Двигаясь к HEAD вычисляется разница
каждого коммита
3. Дельта применяется к ветке develop,
C’ = B + 𝛥АС
𝛥AC
C’
Rebase
46
develop
feature
A B
C D E
git rebase develop
1. Поиск общего предка
2. Двигаясь к HEAD вычисляется разница
каждого коммита
3. Дельта применяется к ветке develop,
C’ = B + 𝛥АС
4. Вычисляется 𝛥CD, и наносится на C’
𝛥AC
C’
𝛥CD
D’
Rebase
47
develop
feature
A B
C D E
git rebase develop
1. Поиск общего предка
2. Двигаясь к HEAD вычисляется разница
каждого коммита
3. Дельта применяется к ветке develop,
C’ = B + 𝛥АС
4. Вычисляется 𝛥CD, и наносится на C’
𝛥AC
C’
𝛥CD
D’ E’
𝛥ED
Rebase
48
develop
feature
A B
git rebase develop
1. Поиск общего предка
2. Двигаясь к HEAD вычисляется разница
каждого коммита
3. Дельта применяется к ветке develop,
C’ = B + 𝛥АС
4. Вычисляется 𝛥CD, и наносится на C’
5. Устанавливается Head на E, ссылки на
старые коммиты удаляются
C D E
Некоторые особенности Rebase
49
•Необходимо помнить, что хэш переписывается
•Изменения, которые зафиксированы, откатить нельзя
•Необходимо проверять каждый шаг Rebase, если возникли
конфликты
Merge vs Rebase
50
•Применяйте Merge только для вливания изменений в Master или
Develop
•Применяйте Rebase для получения изменений в рабочие ветки
51
Cherry-pick
develop
feature
feature-2
52
Cherry-pick
develop
feature
feature-2
git cherry-pick feature-2
53
Cherry-pick
develop
feature
feature-2
54
Cherry-pick
develop
feature
feature-2
1f234b
55
Cherry-pick
develop
feature
feature-2
1f234b
git cherry-pick 1f234b
56
Stash
develop
feature
feature-2
git stash
57
Stash
develop
feature
feature-2
git stash
58
Stash
develop
feature
feature-2
git stash
[0]
[1]
[2]
[3]
59
Stash
develop
feature
feature-2
git stash
git apply stash
[0]
[1]
[2]
[3]
60
Stash
develop
feature
feature-2
git stash
git apply stash
[0]
[1]
[2]
[3]
61
Автоматизация работы при помощи CI
•Отслеживание актуального состояния вашего билда
•Оповещение о тех или иных изменениях в ветках
•Автоматизация сборки тестовых и релизных билдов
62
63
Немного о “Правилах хорошего тона”
64
Немного о “Правилах хорошего тона”
•Никогда не меняйте по одному символу в коммите
65
Немного о “Правилах хорошего тона”
•Никогда не меняйте по одному символу в коммите
•Пиши сообщения к коммитам ясно и четко
66
Немного о “Правилах хорошего тона”
•Никогда не меняйте по одному символу в коммите
•Пиши сообщения к коммитам ясно и четко
•Не делайте изменений в ветке на тысячи строк
67
Напоследок о GUI инструментах для работы c Git
•Сокращение некоторых команд до одной кнопки
•Наглядно можно видеть все ветки
•Встроенные инструменты для решения конфликтов
•Удобный просмотр изменений сделанных в файле
•Легкое добавление изменений которые вы хотите закоммитить
68
69
Спасибо за внимание!
Петров Егор
@barbatosso

More Related Content

What's hot

"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27
MoscowJS
 
Доклад Владислава Чернова & Олега Оямяэ на РИТ++ 2013. "AIDA. Непрерывная инт...
Доклад Владислава Чернова & Олега Оямяэ на РИТ++ 2013. "AIDA. Непрерывная инт...Доклад Владислава Чернова & Олега Оямяэ на РИТ++ 2013. "AIDA. Непрерывная инт...
Доклад Владислава Чернова & Олега Оямяэ на РИТ++ 2013. "AIDA. Непрерывная инт...
Badoo Development
 
Git для новичков
Git для новичковGit для новичков
Git для новичковSoftline
 
Git для начинающих
Git для начинающихGit для начинающих
Git для начинающих
Vadim Drobinin
 
Leap from Testing to QA (RU)
Leap from Testing to QA  (RU)Leap from Testing to QA  (RU)
Leap from Testing to QA (RU)
Igor Goldshmidt
 
Релиз менеджмент в Badoo (Илья Агеев)
Релиз менеджмент в Badoo (Илья Агеев)Релиз менеджмент в Badoo (Илья Агеев)
Релиз менеджмент в Badoo (Илья Агеев)Ontico
 
Релизимся чаще, или тернистый путь к continuous delivery
Релизимся чаще, или тернистый путь к continuous deliveryРелизимся чаще, или тернистый путь к continuous delivery
Релизимся чаще, или тернистый путь к continuous delivery
SQALab
 
It meetup cd
It meetup cdIt meetup cd
It meetup cd
Victoria Astapenko
 
Спецкурс 2014, занятие 5 (часть 2). Git, GitHub и Open source
Спецкурс 2014, занятие 5 (часть 2). Git, GitHub и Open sourceСпецкурс 2014, занятие 5 (часть 2). Git, GitHub и Open source
Спецкурс 2014, занятие 5 (часть 2). Git, GitHub и Open source
7bits
 

What's hot (9)

"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27
 
Доклад Владислава Чернова & Олега Оямяэ на РИТ++ 2013. "AIDA. Непрерывная инт...
Доклад Владислава Чернова & Олега Оямяэ на РИТ++ 2013. "AIDA. Непрерывная инт...Доклад Владислава Чернова & Олега Оямяэ на РИТ++ 2013. "AIDA. Непрерывная инт...
Доклад Владислава Чернова & Олега Оямяэ на РИТ++ 2013. "AIDA. Непрерывная инт...
 
Git для новичков
Git для новичковGit для новичков
Git для новичков
 
Git для начинающих
Git для начинающихGit для начинающих
Git для начинающих
 
Leap from Testing to QA (RU)
Leap from Testing to QA  (RU)Leap from Testing to QA  (RU)
Leap from Testing to QA (RU)
 
Релиз менеджмент в Badoo (Илья Агеев)
Релиз менеджмент в Badoo (Илья Агеев)Релиз менеджмент в Badoo (Илья Агеев)
Релиз менеджмент в Badoo (Илья Агеев)
 
Релизимся чаще, или тернистый путь к continuous delivery
Релизимся чаще, или тернистый путь к continuous deliveryРелизимся чаще, или тернистый путь к continuous delivery
Релизимся чаще, или тернистый путь к continuous delivery
 
It meetup cd
It meetup cdIt meetup cd
It meetup cd
 
Спецкурс 2014, занятие 5 (часть 2). Git, GitHub и Open source
Спецкурс 2014, занятие 5 (часть 2). Git, GitHub и Open sourceСпецкурс 2014, занятие 5 (часть 2). Git, GitHub и Open source
Спецкурс 2014, занятие 5 (часть 2). Git, GitHub и Open source
 

Similar to Giflow

что такое Git и как с ним бороться
что такое Git и как с ним боротьсячто такое Git и как с ним бороться
что такое Git и как с ним боротьсяВладимир Кожаев
 
Git
GitGit
GIT: что внутри, и как это работает?
GIT: что внутри, и как это работает?GIT: что внутри, и как это работает?
GIT: что внутри, и как это работает?
Tados
 
Git for you
Git for youGit for you
Git for you
Pavel Alexeev
 
Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"
Egor Stremousov
 
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
2ГИС Технологии
 
Переход на Git из Subversion
Переход на Git из SubversionПереход на Git из Subversion
Переход на Git из SubversionMikhail Vasilyev
 
Про Git
Про GitПро Git
Про Git
Elena Grahovac
 
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...it-people
 
базовые принципы работы с Git
базовые принципы работы с Gitбазовые принципы работы с Git
базовые принципы работы с Git
DressTester
 
Python dependencies
Python dependenciesPython dependencies
Python dependencies
Ivan Kolodyazhny
 
GIT Slides (25.03.2015)
GIT Slides (25.03.2015)GIT Slides (25.03.2015)
GIT Slides (25.03.2015)
Ilya V
 
Git - Вадим Валуев
Git - Вадим ВалуевGit - Вадим Валуев
Git - Вадим Валуев
DrupalCamp MSK
 
Git (presentation)
Git (presentation)Git (presentation)
Git (presentation)
Anton Ivanov
 
Scino: DVCS на примере Git
Scino: DVCS на примере GitScino: DVCS на примере Git
Scino: DVCS на примере Git
SCINO
 
Gitify - швейцарский нож для MODX-воина
Gitify - швейцарский нож для MODX-воинаGitify - швейцарский нож для MODX-воина
Gitify - швейцарский нож для MODX-воина
MODX Беларусь
 
Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.DrupalForumZP2012
 
Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.
Dmytro Olaresko
 

Similar to Giflow (20)

что такое Git и как с ним бороться
что такое Git и как с ним боротьсячто такое Git и как с ним бороться
что такое Git и как с ним бороться
 
Git
GitGit
Git
 
GIT: что внутри, и как это работает?
GIT: что внутри, и как это работает?GIT: что внутри, и как это работает?
GIT: что внутри, и как это работает?
 
Git for you
Git for youGit for you
Git for you
 
Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"
 
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
 
Переход на Git из Subversion
Переход на Git из SubversionПереход на Git из Subversion
Переход на Git из Subversion
 
Про Git
Про GitПро Git
Про Git
 
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
 
базовые принципы работы с Git
базовые принципы работы с Gitбазовые принципы работы с Git
базовые принципы работы с Git
 
Gitlab devconf
Gitlab devconfGitlab devconf
Gitlab devconf
 
Python dependencies
Python dependenciesPython dependencies
Python dependencies
 
GIT Slides (25.03.2015)
GIT Slides (25.03.2015)GIT Slides (25.03.2015)
GIT Slides (25.03.2015)
 
Git - Вадим Валуев
Git - Вадим ВалуевGit - Вадим Валуев
Git - Вадим Валуев
 
Git (presentation)
Git (presentation)Git (presentation)
Git (presentation)
 
Scino: DVCS на примере Git
Scino: DVCS на примере GitScino: DVCS на примере Git
Scino: DVCS на примере Git
 
Gitify - швейцарский нож для MODX-воина
Gitify - швейцарский нож для MODX-воинаGitify - швейцарский нож для MODX-воина
Gitify - швейцарский нож для MODX-воина
 
Git basis
Git basisGit basis
Git basis
 
Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.
 
Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.
 

Giflow