Slide 1

Slide 1 text

GIT TEAM WITH T FOR @svenpet

Slide 2

Slide 2 text

SVN

Slide 3

Slide 3 text

GIT

Slide 4

Slide 4 text

MERCURIAL

Slide 5

Slide 5 text

CVS

Slide 6

Slide 6 text

ANYTHING ELSE TFS Perforce ClearCase VSS

Slide 7

Slide 7 text

NO VCS AT ALL? you must love pain

Slide 8

Slide 8 text

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

Slide 46

Slide 46 text

THE WORKFLOW DICTATORS & LIEUTENANTS

Slide 47

Slide 47 text

an army of developer

Slide 48

Slide 48 text

a few integrator

Slide 49

Slide 49 text

and a friendly dictator

Slide 50

Slide 50 text

BLESSED REPOSITORY FORKED REPOSITORY FORKED REPOSITORY SYNCH

Slide 51

Slide 51 text

BLESSED REPOSITORY FORKED REPOSITORY FORKED REPOSITORY Pull

Slide 52

Slide 52 text

BLESSED REPOSITORY FORKED REPOSITORY FORKED REPOSITORY Pull X too much stuff!

Slide 53

Slide 53 text

BLESSED REPOSITORY FORKED REPOSITORY FORKED REPOSITORY FORKED REPOSITORY FORKED REPOSITORY Pull Pull Pull

Slide 54

Slide 54 text

BLESSED REPOSITORY FORKED REPOSITORY FORKED REPOSITORY FORKED REPOSITORY FORKED REPOSITORY Pull Pull Pull We are here to help!

Slide 55

Slide 55 text

GREAT FOR HUGE PROJECTS

Slide 56

Slide 56 text

THIS IS A POTENTIAL BOTTLENECK

Slide 57

Slide 57 text

YOU NEED MORE FREEDOM? AND WANT TO MOVE FAST?

Slide 58

Slide 58 text

THE CENTRALIZED WORKFLOW

Slide 59

Slide 59 text

HELLO SUBVERSION USERS! THIS FLOW IS YOUR but Git makes it even better

Slide 60

Slide 60 text

master ONE BRANCH TO RULE THEM ALL all code goes in here

Slide 61

Slide 61 text

CENTRAL REPOSITORY CLONED REPOSITORY your (full) local copy for development

Slide 62

Slide 62 text

CENTRAL REPOSITORY CLONED REPOSITORY everybody integrate changes here your (full) local copy for development

Slide 63

Slide 63 text

CENTRAL REPOSITORY CLONED REPOSITORY do that often!

Slide 64

Slide 64 text

SIMPLE & EASY TO LEARN +CI = ALWAYS DEPLOYABLE CONFLICTS GET VISIBLE EARLY USED FOR YEARS

Slide 65

Slide 65 text

GREAT FOR MIGRATING don't change too much at once

Slide 66

Slide 66 text

UNFINISHED FEATURES

Slide 67

Slide 67 text

FEATURE TOGGLES

Slide 68

Slide 68 text

THE WORKFLOW FEATURE BRANCH

Slide 69

Slide 69 text

WE ORGANIZE WORK IN TASKS, STORIES, FEATURES WHY NOT HAVE THAT IN CODE, TOO?

Slide 70

Slide 70 text

master Feature 1 Feature 2 BRANCH PER FEATURE 1 to X devs working on a branch

Slide 71

Slide 71 text

master BRANCH PER FEATURE Feature 1 Feature 2 get closed when done

Slide 72

Slide 72 text

CLEAN MASTER BRANCH

Slide 73

Slide 73 text

ISOLATED FEATURE DEVELOPMENT

Slide 74

Slide 74 text

GREAT FOR FIXED TIME / FIXED FEATURE DEVELOPMENT develop while bugfix

Slide 75

Slide 75 text

GREAT FOR CONTINUOUS DELIVERY deliver when done

Slide 76

Slide 76 text

master merge frequently FEATURE BRANCH TIPS

Slide 77

Slide 77 text

master synch with MASTER frequently FEATURE BRANCH TIPS

Slide 78

Slide 78 text

master delete branch when done FEATURE BRANCH TIPS

Slide 79

Slide 79 text

master Feature 1 Feature 2 BRANCH PER FEATURE useful branch names

Slide 80

Slide 80 text

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

Slide 185

Slide 185 text

Resources RESOURCES GIT WORKFLOWS https://www.atlassian.com/git/workflows AUTO MERGES http://blogs.atlassian.com/2013/05/git-automatic-merges-with-server-side-hooks-for-the-win/ GIT RESOURCES https://www.atlassian.com/git/resources https://blogs.atlassian.com/2013/07/git-upstreams-forks/ FORKS & UPSTREAMS

Slide 186

Slide 186 text

PICTURES http://www.flickr.com/photos/80384851@N00/2653886484/ http://www.flickr.com/photos/21461615@N00/1353110751 http://www.flickr.com/photos/82402697@N00/449512594 http://www.flickr.com/photos/7228825@N05/675810372 http://www.flickr.com/photos/38451115@N04/4016842259/ http://www.flickr.com/photos/8749778@N06/5601758699/ http://www.flickr.com/photos/37831703@N00/3391877877 http://www.flickr.com/photos/60648084@N00/2900765643/ http://www.flickr.com/photos/28415633@N00/8401940159 http://www.flickr.com/photos/41304517@N00/6814372181 http://www.flickr.com/photos/99796131@N00/120468504/ http://www.flickr.com/photos/92269745@N00/4612732045/ http://www.flickr.com/photos/57768341@N00/3800568262/ http://www.flickr.com/photos/43322231@N07/4390305784/ http://www.flickr.com/photos/40011478@N00/2890078135/ http://www.flickr.com/photos/33909206@N04/7638306424 http://www.flickr.com/photos/8340753@N04/501465437/ http://www.flickr.com/photos/33774513@N08/3510825685/ http://www.flickr.com/photos/55723329@N00/3631928376/ http://www.flickr.com/photos/11389536@N03/5235804240/ http://www.flickr.com/photos/43322231@N07/5410534167 http://www.flickr.com/photos/43322231@N07/5366609719 http://www.flickr.com/photos/43322231@N07/4205372249/ http://www.flickr.com/photos/43322231@N07/4466599835/ http://www.flickr.com/photos/45940879@N04/5598027415/ http://www.flickr.com/photos/83346641@N00/3517813158/