git with t for teams
DESCRIPTION
Git is not just a version control system. Git can change the way you interact with your team members. Lot’s of teams don’t think about reflecting their development workflow in Git and just use it out-of-the-box. Git, however, can be much more powerful, giving your team a boost in productivity, protecting your delivery pipeline and helping you to work better together. In this session we will start with a central workflow that is used by a lot of Subversion teams. You will learn how to practically integrate ALM solutions like continuous deployment, code reviews, change tracking and much more into your individual workflow. You will find out how to protect your master branch from accidental commits, broken builds and unreviewed code. This presentation will help you discover the best way to work together as a team – whether you’re yet to migrate to Git or even an experienced Git user.TRANSCRIPT
GITTEAMWITH T FOR
@svenpet
SVN
GIT
MERCURIAL
CVS
ANYTHING ELSETFS Perforce ClearCase VSS
NO VCS AT ALL?
you must love pain
CHEAP BRANCHINGEVERYTHING IS LOCAL
GIT IS FASTGIT IS SMALL
THE STAGING AREADISTRIBUTED
GITHUB & BITBUCKETGIT IS THE NEW STANDARD
HUGE COMMUNITY
GITWHY IS GOOD*?
* from Lemi Orhan Ergin
GITWHY IS GOOD*?
CHEAP BRANCHINGEVERYTHING IS LOCAL
GIT IS FASTGIT IS SMALL
THE STAGING AREADISTRIBUTED
GITHUB & BITBUCKETGIT IS THE NEW STANDARD
HUGE COMMUNITY
WORKFLOW CAPABILITIES
* from Lemi Orhan Ergin
MASTER RELEASEVERSION 1.9
DETAILED VIEW
BIRDS VIEW
DESIGNED FOR OPEN SOURCE
DISTRIBUTED WORKFLOW
CENTRALIZEDWORKFLOW
companies like those
@svenpet http://svenpet.com
Sven PetersATLASSIAN AMBASSADOR
RELEASECan we fix a bug for the upcoming
?
FEATUREIs the code for that
complete?
for the current version?HOTFIXCan we do a fast
BUILDCan we
the current code ?
REVIEWEDHas everybody
the code for this feature ?
I FIND YOUR LACK OF WORKFLOW STRUCTURE DISTURBING
DIFFERENTPEOPLEPRODUCTSCULTURES
DIFFERENTPEOPLEPRODUCTSCULTURES JIRA, Bitbucket, Stash
DIFFERENTPEOPLEPRODUCTSCULTURES
DIFFERENTPEOPLEPRODUCTSCULTURES
DIFFERENT WORKFLOWS
WORKFLOWBUILD YOUR
rebasemerge
fork
clone
push
pull
Git
WORKFLOWBUILD YOUR
NOT POSSIBLE WITH GITONE WORKFLOW:
block files while working on it
we know what can happen!
FORK WORKFLOWS
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!
THE GATEKEEPER WORKFLOWfor teams
REPOSITORY
it's such an awesome library
REPOSITORYFORKED
REPOSITORYFORK
REPOSITORYFORKED
REPOSITORYSYNCH
Get updates on request or automatically*
* with awesome tools like Stash or with Git hooks
REPOSITORYFORKED
REPOSITORYFORK
I've done an awesome change
REPOSITORYFORKED
REPOSITORYPUSH CHANGEX
REPOSITORYFORKED
REPOSITORY
can you pull in my changes? he is the gatekeeper
REPOSITORYFORKED
REPOSITORYPULL CHANGES
likes the changes
exactly and it works great!
LOOKS LIKE AN OPEN SOURCE PROCESS?
DISTRIBUTED TEAMS
DIFFERENT PROGRAMMING SKILLS
FLEXIBLE ROADMAPS
LEARN FROM OPEN SOURCE TEAMS?
FORKING IN THEENTERPRISE
FORKING IN THEENTERPRISE
5 REASONS FOR...
FORKING IN THEENTERPRISE
REASON 1
GREAT FOR CUSTOMIZING LIBRARIES
and still get bug fixes
FORKING IN THEENTERPRISE
REASON 2
GREAT FOR INNOVATION SPIKES
and maybe add it later
FORKING IN THEENTERPRISE
REASON 3
PROTECTING YOUR COMPONENTS
but still be open for changes
FORKING IN THEENTERPRISE
REASON 4
REDUCE THE NOISE
and keep the overview for huge projects
FORKING IN THEENTERPRISE
REASON 5
INTERACTION WITH CONTRACTORS & INTERNSprotect your sources
THE WORKFLOWDICTATORS &LIEUTENANTS
an army of developer
a few integrator
and a friendly dictator
BLESSED REPOSITORY
FORKED REPOSITORY
FORKED REPOSITORY SYNCH
BLESSED REPOSITORY
FORKED REPOSITORY
FORKED REPOSITORY Pull
BLESSED REPOSITORY
FORKED REPOSITORY
FORKED REPOSITORY PullX
too much stuff!
BLESSED REPOSITORY
FORKED REPOSITORY
FORKED REPOSITORY
FORKED REPOSITORY
FORKED REPOSITORY
Pull
Pull Pull
BLESSED REPOSITORY
FORKED REPOSITORY
FORKED REPOSITORY
FORKED REPOSITORY
FORKED REPOSITORY
Pull
Pull Pull
We are here to help!
GREAT FOR HUGE PROJECTS
THIS IS A POTENTIAL BOTTLENECK
YOU NEED MORE FREEDOM?AND WANT TO MOVE FAST?
THE CENTRALIZED WORKFLOW
HELLO SUBVERSION USERS!
THIS FLOWISYOUR
but Git makes it even better
master
ONE BRANCHTO RULE THEM ALL
all code goes in here
CENTRAL REPOSITORY
CLONED REPOSITORY
your (full) local copy for development
CENTRAL REPOSITORY
CLONED REPOSITORY
everybody integrate changes here
your (full) local copy for development
CENTRAL REPOSITORY
CLONED REPOSITORY
do that often!
SIMPLE & EASY TO LEARN
+CI = ALWAYS DEPLOYABLE
CONFLICTS GET VISIBLE EARLY
USED FOR YEARS
GREAT FOR MIGRATING
don't change too much at once
UNFINISHED
FEATURES
FEATURE TOGGLES
THE WORKFLOWFEATUREBRANCH
WE ORGANIZE WORK IN TASKS, STORIES, FEATURES
WHY NOT HAVE THAT IN CODE, TOO?
master
Feature 1
Feature 2BRANCH PER FEATURE
1 to X devs working on a branch
master
BRANCH PER FEATURE
Feature 1
Feature 2
get closed when done
CLEAN MASTER BRANCH
ISOLATED FEATURE DEVELOPMENT
GREATFOR FIXED TIME / FIXED FEATURE DEVELOPMENT
develop while bugfix
GREATFOR CONTINUOUS DELIVERY
deliver when done
master
merge frequently
FEATURE BRANCH TIPS
master
synch with MASTER frequently
FEATURE BRANCH TIPS
master
delete branch when done
FEATURE BRANCH TIPS
master
Feature 1
Feature 2BRANCH PER FEATURE
useful branch names
master
ADD USER
DELETE USER
BRANCH PER FEATURE
useful branch names
master
J-60 ADD USER
J-98 DELETE USER
BRANCH PER FEATURE
use key from issue tracker
THE WORKFLOWFEATUREBRANCH
with code reviews
LEARN
BETTER QUALITY
FEEL BETTER
BLAME
WHY DO YOU WANT TO DISCUSS YOUR CODE CHANGES?
PULLREQUESTS
+
< >
master
Pull Request
what do you think?
master
Pull Request
discuss changes GOOD!
AGREE!
master
Pull Request
approve changes
master
Pull Request
merge
THE WORKFLOW *
*SOURCE: ZACH HOLMAN "HOW GITHUB WORKS"
THE WORKFLOWFEATUREBRANCH
with history
DON'T FORGET YOUR PAST
master
HISTORYDEVELOP
new branch called DEVELOP
master
HISTORYDEVELOP
we integrate changes here
Feature
master
HISTORYDEVELOP
and tag our releases here
Feature
V. 1.1
master
HISTORYDEVELOP
makes this branch stable
Feature
V. 1.1
THE
WORKFLOW
Prod
ucti
on
STAG
ING
upcoming version
THE
WORKFLOW
never direct integration... just for hotfixes
only through Pull Request (except when not)
Prod
ucti
on
STAG
ING
without Pull Request
THE
WORKFLOW
we create a HOTFIX branch (of course) and also merge to STAGING-Branch
THE WORKFLOWRELEASE
COOL STUFFWE'RE FLOWING!
RELEASE CANDIDATES
inspect your release candidate
inspect your release candidate...and don't destroy your flow
RELEASE CANDIDATES
mast
er
RELEASE
DEVE
LOP
RELE
ASE
CAND
IDAT
E
feature complete
release team works here
other dev teams "flow" here
mast
er
RELEASE
DEVE
LOP
RELE
ASE
CAND
IDAT
E fixing back to DEVELOP
mast
er
RELEASE
DEVE
LOP
RELE
ASE
CAND
IDAT
E
merge, tag, release!
V. 1.1
POTENTIA
LLY
READY
PROMISED SET OF FEATURES
BUGS HAVE A BIG IMPACT
RELEASES ARE EXPENSIVE
AFRAID OF FAILURES
THE WORKFLOWMAINTENANCE
RELEASED SOFTWARE HAS BUGSHouston we have a problem
mast
er
MAINTENANCE
DEVE
LOP
1.1
hotf
ix branch from MASTER and fix the damn bug
mast
er
MAINTENANCE
DEVE
LOP
1.1
hotf
ix
merge with MASTER, tag and release
1.2.1
mast
er
MAINTENANCE
DEVE
LOP
1.1
hotf
ix
merge with DEVELOP and delete HOTFIX
1.2.1
mast
er
MAINTENANCE
DEVE
LOP
1.1
hotf
ixRC
- 1.2
1.1.2
ONE EXCEPTION: A RELEASE BRANCH EXISTS
THE FLOWGIT
YOU'VE JUST SEEN IT!
FLOWGITTHEDEVELOP & MASTER BRANCH
FEATURE BRANCHES
RELEASE BRANCHES
MAINTENANCE BRANCHES
from Vincent Driessen
HOW CAN I FIND MY WAY THROUGH THE
RULE JUNGLE?
USE TOOLS
HOW CAN I REMEMBER ALL THESE
GIT COMMANDS AND 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
HOW CAN I REMEMBER ALL THESE
GIT COMMANDS AND RULES?
FLOWGITWHY
I thought every team is different?
FLOWGITWHY
IT CAPTURES A LOT OF DEVELOPMENT SITUATIONSIT'S WELL KNOWN: EASY ADOPTION
BUTI WON'T USE IT OUT-OF-THE-BOX: ADAPT IT!
THE FLOWSTASH TEAMat Atlassian
FLOWGITMAKINGMORE SIMPLE
getting rid of MASTER
BRANCH
KEEP YOUR
RELEASE no merge into MASTER needed
RELE
ASE
2.1
STASH TEAM FLOW
DEVE
LOP
2.1
no MASTER, we keep RELEASE
RELE
ASE
2.1
DEVE
LOP
2.1hotf
ix 2
.1.1
branch HOTFIX from RELEASE and fix the damn bug
STASH TEAM FLOW
RELE
ASE
2.1
DEVE
LOP
2.1hotf
ix 2
.1.1
merge back to RELEASE2.1
.1
STASH TEAM FLOW
RELE
ASE
2.1
DEVE
LOP
2.1hotf
ix 2
.1.1
and apply changes to DEVELOP
2.1.1
STASH TEAM FLOW
SUPPORTING OLD VERSIONS
they are still out there ...and have sometimes problems
RELE
ASE
2.1
DEVE
LOP
we need to fix a bug in 2.0
RELE
ASE
2.0
STASH TEAM FLOW
RELE
ASE
2.1
DEVE
LOP
hotf
ix 2
.0.1
you've seen this before
RELE
ASE
2.0
STASH TEAM FLOW
RELE
ASE
2.1
DEVE
LOP
hotf
ix 2
.0.1
merge with 2.1 RELEASE branch
RELE
ASE
2.0
STASH TEAM FLOW
RELE
ASE
2.1
DEVE
LOP
hotf
ix 2
.0.1
and apply changes from RELEASE 2.1 to DEVELOP
RELE
ASE
2.0
STASH TEAM FLOW
can change tomorrowSTASH TEAM FLOW
We want to helpSTASH TEAM FLOW
RELE
ASE
2.1
DEVE
LOP
2.1hotf
ix 2
.1.1 2.1
.1
I could do this
I could do this
SERVER SIDE AUTO MERGES
with Git hooks
LEAN BACK AND ENJOY PUREAWESOMENESS
RELE
ASE
2.1
DEVE
LOP
hotf
ix 2
.0.1
RELE
ASE
2.0
merge here
STASH TEAM FLOW
RELE
ASE
2.1
DEVE
LOP
hotf
ix 2
.0.1
RELE
ASE
2.0
and let the robots take over
STASH TEAM FLOW
NOT ENOUGH POSSIBILITIES?
INFINITE WORKFLOW POSSIBILITIES
CUSTOMIZE YOUR WORKFLOW WITH HOOKS
PUSH
PUSH
Script is doing some stuff
PUSH
WATCH OUT: HOOK MAGIC
at Atlassian
1 DON'T BRANCH FROM A RED BUILD
1 DON'T BRANCH FROM A RED BUILD
2 BE INFORMED
Chat
2 BE INFORMED
WORKFLOWS WITH CI SERVERSContinuous Integration
WANTWESTABLE DEVELOP BRANCH THAT IS CI TESTEDto be sure, that we won't break things
COULDWEPULL CHANGES BUILD LOCALLY MERGE IF OK
COULDWE
MERGE & PRAY
MERGEAUTOON
WHY NOT USE
BRANCHES ?FEATUREand build it from there!
DEVELOP
potential integration problem
AUTO MERGES
DEVELOP
pull frequently
AUTO MERGES
DEVELOP
pull frequently automatically on commits
AUTO MERGES
SOMETIMES WHEN MERGING
SHIT HAPPENS.
AND SOMEBODY PUSHES BUGGY CODE TO DEVELOP
DEVELOP
push automatically on green builds of DEVELOP
GREEN BUILD MERGES
POOR CI ADMINISTRATOR
setting up builds for all these tasks
AUTO DETECT BRANCHES
AUTO DETECT BRANCHES
BUILD ON EVERY COMMIT KILLED OUR CI SERVERS
x features branches * x pushes a day = server overload
BUILD ON EVERY COMMIT ON MASTER, RELEASE & DEVELOPBUILD MANUALLY ON FEATURE BRANCHES
DOING AUTO MERGES ON GREEN BUILDS OF DEVELOP
WORKFLOWS WITH ISSUETRACKING
DIFFERENT PEOPLE HAVE DIFFERENT VIEWS ON YOUR PROJECT
cool developers
incredible product owner
amazing scrum master
ISSUE TRACKERS CONNECT US CODERS WITH THE REAL WORLD
cool developers
incredible product owner
amazing scrum master
ISSUE TRACKERS CONNECTS GIT WITH THE REAL WORLD
cool developers
incredible product owner
amazing scrum master
WE LIVE IN CODE!
LET ME WORK IN CODE I JUST NEED TO KNOW WHAT
MY CODE SHOULD SOLVE!
Problem understood, I start coding
HOW DO ISSUE TRACKERS CONNECT TO THE CODE?
HOW DO ISSUE TRACKERS CONNECT TO THE CODE?
Ah good, the coders started
commit -m "fixes #6, resolve ticket #5"
HOW DO ISSUE TRACKERS CONNECT TO THE CODE?
HOW DO ISSUE TRACKERS CONNECT TO THE CODE?
commit -m "fixes #6, resolve ticket #5"
WHAT'S IN IT FOR ?
SEE WHAT'S IN DEVELOP
SEE ISSUES IN REVIEW
SEE FINISHED ISSUES ALREADY MERGED WITH DEVELOP
non geeks
WHAT'S IN IT FOR ?
DOING CODE REVIEWS IN CONTEXTBROWSING FEATURE DESCRIPTIONS SHOW CODE CHANGES
... I HAVE A DREAM
'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
'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
'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'
'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
RISE GIT TOOLSOFTHE
DON'T FLOW
LIKE IT'S 1999
svenpet.com/talks@svenpet
DON'T USE GITTOMORROW 3PM ROOM 7
THANKS
ResourcesRESOURCES
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
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/