CHEAP BRANCHING
EVERYTHING IS LOCAL
GIT IS FAST
GIT IS SMALL
THE STAGING AREA
DISTRIBUTED
GITHUB & BITBUCKET
GIT IS THE NEW STANDARD
HUGE COMMUNITY
GIT
WHY IS GOOD*?
* from Lemi Orhan Ergin
Slide 9
Slide 9 text
GIT
WHY IS GOOD*?
CHEAP BRANCHING
EVERYTHING IS LOCAL
GIT IS FAST
GIT IS SMALL
THE STAGING AREA
DISTRIBUTED
GITHUB & BITBUCKET
GIT IS THE NEW STANDARD
HUGE COMMUNITY
WORKFLOW CAPABILITIES
* from Lemi Orhan Ergin
Slide 10
Slide 10 text
MASTER RELEASE
VERSION 1.9
DETAILED VIEW
Slide 11
Slide 11 text
BIRDS VIEW
Slide 12
Slide 12 text
DESIGNED FOR OPEN SOURCE
Slide 13
Slide 13 text
DISTRIBUTED WORKFLOW
Slide 14
Slide 14 text
CENTRALIZED
WORKFLOW
companies like those
Slide 15
Slide 15 text
@svenpet
http://svenpet.com
Sven Peters
ATLASSIAN AMBASSADOR
Slide 16
Slide 16 text
RELEASE
Can we fix a bug for the upcoming
?
FEATURE
Is the code for that
complete?
for the current version?
HOTFIX
Can we do a fast
BUILD
Can we
the current code ?
REVIEWED
Has everybody
the code for this feature ?
Slide 17
Slide 17 text
I FIND YOUR LACK OF WORKFLOW STRUCTURE DISTURBING
Slide 18
Slide 18 text
DIFFERENT
PEOPLE
PRODUCTS
CULTURES
Slide 19
Slide 19 text
DIFFERENT
PEOPLE
PRODUCTS
CULTURES
JIRA, Bitbucket, Stash
Slide 20
Slide 20 text
DIFFERENT
PEOPLE
PRODUCTS
CULTURES
Slide 21
Slide 21 text
DIFFERENT
PEOPLE
PRODUCTS
CULTURES
DIFFERENT
WORKFLOWS
Slide 22
Slide 22 text
WORKFLOW
BUILD YOUR
rebase
merge
fork
clone
push
pull
Slide 23
Slide 23 text
Git
WORKFLOW
BUILD YOUR
Slide 24
Slide 24 text
NOT POSSIBLE WITH GIT
ONE WORKFLOW:
Slide 25
Slide 25 text
block files while working on it
Slide 26
Slide 26 text
we know what can happen!
Slide 27
Slide 27 text
FORK WORKFLOWS
Slide 28
Slide 28 text
MAKES A COPY OF A REPOSITORY ON THE SERVER
YOU CAN NOT WRITE DIRECTLY
TO THE ORIGINAL REMOTE REPOSITORY
YOU CAN STILL GET CHANGES FROM THE ORIGINAL REMOTE REPOSITORY
forking rocks!
Slide 29
Slide 29 text
THE GATEKEEPER WORKFLOW
for teams
Slide 30
Slide 30 text
REPOSITORY
it's such an awesome library
Slide 31
Slide 31 text
REPOSITORY
FORKED
REPOSITORY
FORK
Slide 32
Slide 32 text
REPOSITORY
FORKED
REPOSITORY
SYNCH
Get updates on request or automatically*
* with awesome tools like Stash or with Git hooks
Slide 33
Slide 33 text
REPOSITORY
FORKED
REPOSITORY
FORK
I've done an awesome change
Slide 34
Slide 34 text
REPOSITORY
FORKED
REPOSITORY
PUSH CHANGE
X
Slide 35
Slide 35 text
REPOSITORY
FORKED
REPOSITORY
can you pull in my changes?
he is the gatekeeper
Slide 36
Slide 36 text
REPOSITORY
FORKED
REPOSITORY
PULL CHANGES
likes the changes
Slide 37
Slide 37 text
exactly and it works great!
LOOKS LIKE AN OPEN SOURCE PROCESS?
Slide 38
Slide 38 text
DISTRIBUTED TEAMS
DIFFERENT PROGRAMMING SKILLS
FLEXIBLE ROADMAPS
LEARN FROM OPEN SOURCE TEAMS?
Slide 39
Slide 39 text
FORKING IN THE
ENTERPRISE
Slide 40
Slide 40 text
FORKING IN THE
ENTERPRISE
5 REASONS FOR...
Slide 41
Slide 41 text
FORKING IN THE
ENTERPRISE
REASON 1
GREAT FOR CUSTOMIZING LIBRARIES
and still get bug fixes
Slide 42
Slide 42 text
FORKING IN THE
ENTERPRISE
REASON 2
GREAT FOR INNOVATION SPIKES
and maybe add it later
Slide 43
Slide 43 text
FORKING IN THE
ENTERPRISE
REASON 3
PROTECTING YOUR COMPONENTS
but still be open for changes
Slide 44
Slide 44 text
FORKING IN THE
ENTERPRISE
REASON 4
REDUCE THE NOISE
and keep the overview for huge projects
Slide 45
Slide 45 text
FORKING IN THE
ENTERPRISE
REASON 5
INTERACTION WITH CONTRACTORS & INTERNS
protect your sources
master
ADD
USER
DELETE
USER
BRANCH PER FEATURE
useful branch names
Slide 81
Slide 81 text
master
J-60
ADD
USER
J-98
DELETE
USER
BRANCH PER FEATURE
use key from issue tracker
Slide 82
Slide 82 text
THE WORKFLOW
FEATURE
BRANCH
with code reviews
Slide 83
Slide 83 text
LEARN
BETTER QUALITY
FEEL BETTER
BLAME
WHY DO YOU WANT TO DISCUSS
YOUR CODE CHANGES?
Slide 84
Slide 84 text
PULL
REQUESTS
+
< >
Slide 85
Slide 85 text
master
Pull Request
what do you think?
Slide 86
Slide 86 text
master
Pull Request
discuss changes
GOOD!
AGREE!
Slide 87
Slide 87 text
master
Pull Request
approve changes
Slide 88
Slide 88 text
master
Pull Request
merge
Slide 89
Slide 89 text
THE WORKFLOW *
*SOURCE: ZACH HOLMAN "HOW GITHUB WORKS"
Slide 90
Slide 90 text
THE WORKFLOW
FEATURE
BRANCH
with history
Slide 91
Slide 91 text
DON'T FORGET YOUR PAST
Slide 92
Slide 92 text
master
HISTORY
DEVELOP
new branch called DEVELOP
Slide 93
Slide 93 text
master
HISTORY
DEVELOP
we integrate changes here
Feature
Slide 94
Slide 94 text
master
HISTORY
DEVELOP
and tag our releases here
Feature
V. 1.1
Slide 95
Slide 95 text
master
HISTORY
DEVELOP
makes this branch stable
Feature
V. 1.1
Slide 96
Slide 96 text
THE
WORKFLOW
Slide 97
Slide 97 text
Production
STAGING
upcoming version
THE
WORKFLOW
never direct integration...
just for hotfixes
only through Pull Request
(except when not)
Slide 98
Slide 98 text
Production
STAGING
without Pull Request
THE
WORKFLOW
we create a HOTFIX branch (of course)
and also merge to STAGING-Branch
Slide 99
Slide 99 text
THE WORKFLOW
RELEASE
Slide 100
Slide 100 text
COOL STUFF
WE'RE FLOWING!
Slide 101
Slide 101 text
RELEASE CANDIDATES
inspect your release candidate
Slide 102
Slide 102 text
inspect your release candidate
...and don't destroy your flow
RELEASE CANDIDATES
Slide 103
Slide 103 text
master
RELEASE
DEVELOP
RELEASE CANDIDATE
feature complete
release team works here
other dev teams "flow" here
Slide 104
Slide 104 text
master
RELEASE
DEVELOP
RELEASE CANDIDATE
fixing back to DEVELOP
Slide 105
Slide 105 text
master
RELEASE
DEVELOP
RELEASE CANDIDATE
merge, tag, release!
V. 1.1
Slide 106
Slide 106 text
POTENTIALLY
READY
PROMISED SET
OF FEATURES
BUGS HAVE A BIG
IMPACT
RELEASES ARE
EXPENSIVE
AFRAID OF
FAILURES
Slide 107
Slide 107 text
THE WORKFLOW
MAINTENANCE
Slide 108
Slide 108 text
RELEASED SOFTWARE HAS BUGS
Houston we have a problem
Slide 109
Slide 109 text
master
MAINTENANCE
DEVELOP
1.1
hotfix
branch from MASTER and fix
the damn bug
Slide 110
Slide 110 text
master
MAINTENANCE
DEVELOP
1.1
hotfix
merge with MASTER, tag and
release
1.2.1
Slide 111
Slide 111 text
master
MAINTENANCE
DEVELOP
1.1
hotfix
merge with DEVELOP and
delete HOTFIX
1.2.1
Slide 112
Slide 112 text
master
MAINTENANCE
DEVELOP
1.1
hotfix
RC - 1.2
1.1.2
ONE EXCEPTION:
A RELEASE BRANCH EXISTS
Slide 113
Slide 113 text
THE FLOW
GIT
Slide 114
Slide 114 text
YOU'VE JUST SEEN IT!
Slide 115
Slide 115 text
FLOW
GIT
THE
DEVELOP & MASTER BRANCH
FEATURE BRANCHES
RELEASE BRANCHES
MAINTENANCE BRANCHES
from Vincent Driessen
Slide 116
Slide 116 text
HOW CAN I FIND MY WAY THROUGH THE
RULE JUNGLE?
USE TOOLS
Slide 117
Slide 117 text
HOW CAN I REMEMBER ALL THESE
GIT COMMANDSAND RULES?
there is a command line tool
git flow release start 1.6
git flow feature start 'JRA-34 Add User'
git flow feature finish 'JRA-34 Add User'
git flow hotfix finish 1.5.3
Slide 118
Slide 118 text
HOW CAN I REMEMBER ALL THESE
GIT COMMANDSAND RULES?
Slide 119
Slide 119 text
FLOW
GIT
WHY
I thought every team is different?
Slide 120
Slide 120 text
FLOW
GIT
WHY
IT CAPTURES A LOT OF DEVELOPMENT SITUATIONS
IT'S WELL KNOWN: EASY ADOPTION
BUT
I WON'T USE IT OUT-OF-THE-BOX: ADAPT IT!
Slide 121
Slide 121 text
THE FLOW
STASH TEAM
at Atlassian
Slide 122
Slide 122 text
FLOW
GIT
MAKING
MORE SIMPLE
getting rid of MASTER
Slide 123
Slide 123 text
BRANCH
KEEP YOUR
RELEASE
no merge into MASTER needed
Slide 124
Slide 124 text
RELEASE 2.1
STASH TEAM FLOW
DEVELOP
2.1
no MASTER, we keep RELEASE
Slide 125
Slide 125 text
RELEASE 2.1
DEVELOP
2.1
hotfix 2.1.1
branch HOTFIX from RELEASE
and fix the damn bug
STASH TEAM FLOW
Slide 126
Slide 126 text
RELEASE 2.1
DEVELOP
2.1
hotfix 2.1.1
merge back to RELEASE
2.1.1
STASH TEAM FLOW
Slide 127
Slide 127 text
RELEASE 2.1
DEVELOP
2.1
hotfix 2.1.1
and apply changes to DEVELOP
2.1.1
STASH TEAM FLOW
Slide 128
Slide 128 text
SUPPORTING OLD VERSIONS
they are still out there
...and have sometimes problems
Slide 129
Slide 129 text
RELEASE 2.1
DEVELOP
we need to fix a bug in 2.0
RELEASE 2.0
STASH TEAM FLOW
Slide 130
Slide 130 text
RELEASE 2.1
DEVELOP
hotfix 2.0.1
you've seen this before
RELEASE 2.0
STASH TEAM FLOW
Slide 131
Slide 131 text
RELEASE 2.1
DEVELOP
hotfix 2.0.1
merge with 2.1 RELEASE branch
RELEASE 2.0
STASH TEAM FLOW
Slide 132
Slide 132 text
RELEASE 2.1
DEVELOP
hotfix 2.0.1
and apply changes from
RELEASE 2.1 to DEVELOP
RELEASE 2.0
STASH TEAM FLOW
Slide 133
Slide 133 text
can change tomorrow
STASH TEAM FLOW
Slide 134
Slide 134 text
We want to help
STASH TEAM FLOW
Slide 135
Slide 135 text
RELEASE 2.1
DEVELOP
2.1
hotfix 2.1.1
2.1.1
I could do this
Slide 136
Slide 136 text
I could do this
SERVER SIDE
AUTO MERGES with Git hooks
Slide 137
Slide 137 text
LEAN BACK AND ENJOY PURE
AWESOMENESS
Slide 138
Slide 138 text
RELEASE 2.1
DEVELOP
hotfix 2.0.1
RELEASE 2.0
merge here
STASH TEAM FLOW
Slide 139
Slide 139 text
RELEASE 2.1
DEVELOP
hotfix 2.0.1
RELEASE 2.0
and let the robots take over
STASH TEAM FLOW
Slide 140
Slide 140 text
NOT ENOUGH POSSIBILITIES?
Slide 141
Slide 141 text
INFINITE WORKFLOW POSSIBILITIES
Slide 142
Slide 142 text
CUSTOMIZE YOUR WORKFLOW WITH HOOKS
Slide 143
Slide 143 text
PUSH
Slide 144
Slide 144 text
PUSH
Script is doing some stuff
Slide 145
Slide 145 text
PUSH
Slide 146
Slide 146 text
WATCH OUT:
HOOK MAGIC
at
Atlassian
Slide 147
Slide 147 text
1 DON'T BRANCH FROM A RED BUILD
Slide 148
Slide 148 text
1 DON'T BRANCH FROM A RED BUILD
Slide 149
Slide 149 text
2 BE INFORMED
Chat
Slide 150
Slide 150 text
2 BE INFORMED
Slide 151
Slide 151 text
WORKFLOWS WITH CI SERVERS
Continuous Integration
Slide 152
Slide 152 text
WANT
WE
STABLE DEVELOP BRANCH THAT IS CI TESTED
to be sure, that we won't break things
Slide 153
Slide 153 text
COULD
WE
PULL CHANGES
BUILD LOCALLY
MERGE IF OK
Slide 154
Slide 154 text
COULD
WE
MERGE & PRAY
Slide 155
Slide 155 text
MERGE
AUTO
ON
WHY NOT USE
BRANCHES ?
FEATURE
and build it from there!
Slide 156
Slide 156 text
DEVELOP
potential integration problem
AUTO MERGES
Slide 157
Slide 157 text
DEVELOP
pull frequently
AUTO MERGES
Slide 158
Slide 158 text
DEVELOP
pull frequently automatically on
commits
AUTO MERGES
Slide 159
Slide 159 text
SOMETIMES WHEN MERGING
SHIT
HAPPENS.
AND SOMEBODY PUSHES BUGGY CODE TO DEVELOP
Slide 160
Slide 160 text
DEVELOP
push automatically on green
builds of DEVELOP
GREEN BUILD MERGES
Slide 161
Slide 161 text
POOR CI ADMINISTRATOR
setting up builds for all these tasks
Slide 162
Slide 162 text
AUTO DETECT BRANCHES
Slide 163
Slide 163 text
AUTO DETECT BRANCHES
Slide 164
Slide 164 text
BUILD ON EVERY COMMIT KILLED OUR CI SERVERS
x features branches * x pushes a day
= server overload
Slide 165
Slide 165 text
BUILD ON EVERY COMMIT ON MASTER, RELEASE & DEVELOP
BUILD MANUALLY ON FEATURE BRANCHES
DOING AUTO MERGES ON GREEN BUILDS OF DEVELOP
Slide 166
Slide 166 text
WORKFLOWS WITH ISSUE
TRACKING
Slide 167
Slide 167 text
DIFFERENT
PEOPLE HAVE DIFFERENT VIEWS ON YOUR
PROJECT
cool developers
incredible product
owner
amazing scrum
master
Slide 168
Slide 168 text
ISSUE TRACKERS CONNECT US CODERS WITH THE
REAL WORLD
cool developers
incredible product
owner
amazing scrum
master
Slide 169
Slide 169 text
ISSUE TRACKERS CONNECTS
GIT WITH THE
REAL WORLD
cool developers
incredible product
owner
amazing scrum
master
Slide 170
Slide 170 text
WE LIVE IN CODE!
LET ME WORK IN CODE
I JUST NEED TO KNOW WHAT
MY CODE SHOULD SOLVE!
Slide 171
Slide 171 text
Problem understood,
I start coding
HOW DO ISSUE TRACKERS CONNECT TO THE CODE?
Slide 172
Slide 172 text
HOW DO ISSUE TRACKERS CONNECT TO THE CODE?
Ah good,
the coders started
Slide 173
Slide 173 text
commit -m "fixes #6, resolve ticket #5"
HOW DO ISSUE TRACKERS CONNECT TO THE CODE?
Slide 174
Slide 174 text
HOW DO ISSUE TRACKERS CONNECT TO THE CODE?
commit -m "fixes #6, resolve ticket #5"
Slide 175
Slide 175 text
WHAT'S IN IT FOR ?
SEE WHAT'S IN DEVELOP
SEE ISSUES IN REVIEW
SEE FINISHED ISSUES ALREADY MERGED WITH DEVELOP
non geeks
Slide 176
Slide 176 text
WHAT'S IN IT FOR ?
DOING CODE REVIEWS IN CONTEXT
BROWSING FEATURE DESCRIPTIONS SHOW CODE CHANGES
Slide 177
Slide 177 text
... I HAVE A DREAM
Slide 178
Slide 178 text
'START PROGRESS' ON AN ISSUE CREATES A FEATURE BRANCH
DOING A PULL REQUEST MARKS THE ISSUE 'IN REVIEW'
MERGING A FEATURE BRANCH MARKS THE ISSUE AS 'RESOLVED'
GIT WORKFLOW
Slide 179
Slide 179 text
'START PROGRESS' ON AN ISSUE CREATES A FEATURE BRANCH
DOING A PULL REQUEST MARKS THE ISSUE 'IN REVIEW'
MERGING A FEATURE BRANCH MARKS THE ISSUE AS 'RESOLVED'
ISSUE WORKFLOW
Slide 180
Slide 180 text
'START PROGRESS' ON AN ISSUE CREATES A FEATURE BRANCH
DOING A PULL REQUEST MARKS THE ISSUE 'IN REVIEW'
MERGING A FEATURE BRANCH MARKS THE ISSUE AS 'RESOLVED'
Slide 181
Slide 181 text
'START PROGRESS' ON AN ISSUE CREATES A FEATURE BRANCH
DOING A PULL REQUEST MARKS THE ISSUE 'IN REVIEW'
MERGING A FEATURE BRANCH MARKS THE ISSUE AS 'RESOLVED'
GIT COMBINED ISSUE WORKFLOW
Slide 182
Slide 182 text
RISE GIT TOOLS
OF
THE
Slide 183
Slide 183 text
DON'T FLOW
LIKE IT'S 1999
Slide 184
Slide 184 text
svenpet.com/talks
@svenpet
DON'T USE GIT
TOMORROW 3PM ROOM 7
THANKS