DcATL 2013: Git-Flow for Daily Use
-
Upload
mediacurrent -
Category
Technology
-
view
1.072 -
download
0
description
Transcript of DcATL 2013: Git-Flow for Daily Use
Git-Flow for Daily Use@Mediacurrent@kBasarab
@Mediacurrent@kBasarab
Kevin BasarabSr. Drupal DeveloperMediacurrent
● Git 101
● A multiple environment setup (Dev-Stage-Prod)
● Comfortable on the CLI
Prereqs
● Parallel Development
● Collaboration
● Release Staging
● Support for Emergency fixes
Source: http://datasift.github.com/gitflow/IntroducingGitFlow.html
Benefits
● At the core Git-flow is a branching and merging strategy
● GIT branches are cheap, merges are easy
● Other systems: Each branch is a complete replication of codebase
Source: http://datasift.github.com/gitflow/IntroducingGitFlow.html
What is Git-Flow?
> git branch -a;
Source: http://datasift.github.com/gitflow/IntroducingGitFlow.htmlde
velo
p
new
_bra
nch
*developmasterremotes/origin/masterremotes/origin/develop
> git checkout -b new_branchSwitched to a new branch 'new_branch'
> git branchdevelop...*new_branch
> git branch test_2
Branching 101
> git checkout develop;Switched to branch 'develop'
Source: http://datasift.github.com/gitflow/IntroducingGitFlow.html
> git merge new_branch
Merging 101
● Master Branch
○ The production site codebase
● Develop Branch
○ All code ready for production on a staging environment
● Feature
○ Active code development. Usually related to one ticket.
● Release
○ Integration branch to test develop merging into master
● Hotfix
○ Emergency fix to the production site
Source: http://datasift.github.com/gitflow/IntroducingGitFlow.html
Terminology
Source: http://nvie.com/posts/a-successful-git-branching-model/
Visualize Git-Flow
Source: http://nvie.com/posts/a-successful-git-branching-model/
Visualize Git-Flow
Source: http://nvie.com/posts/a-successful-git-branching-model/
Visualize Git-Flow
Source: http://nvie.com/posts/a-successful-git-branching-model/
Visualize Git-Flow
Source: http://bit.ly/10iUTKK
● Start using git-flow on a basic git repo
● Roll code based on a ticket
● Have a peer code review or help build functionality.
● Release this to production
● We had a misspelling, fix on production
Scenario
● Install git-flow locally.
○ https://github.com/nvie/gitflow/wiki/Mac-OS-X
○ https://github.com/nvie/gitflow/wiki/Linux
○ https://github.com/nvie/gitflow/wiki/Windows> git status# On branch masternothing to commit (working directory clean)
> git-flow initWhich branch should be used for bringing forth production releases? - masterBranch name for production releases: [master] Branch name for "next release" development: [develop]
How to name your supporting branch prefixes?Feature branches? [feature/] Release branches? [release/] Hotfix branches? [hotfix/] Support branches? [support/] Version tag prefix? []
Setup Git-Flow
> git checkout develop
> git branch* develop master
> git-flow feature start 1234-78900-Add-FeatureSwitched to a new branch 'feature/1234-78900-Add-Feature'
Summary of actions:- A new branch 'feature/1234-78900-Add-Feature' was created, based on 'develop'- You are now on branch 'feature/1234-78900-Add-Feature'
Now, start committing on your feature. When done, use:
git flow feature finish 1234-78900-Add-Feature
Create Feature
> git-flow feature publish 1234-78900-Add-FeatureTotal 0 (delta 0), reused 0 (delta 0)remote: bb/acl: kbasarab is allowed. accepted payload.To test.git * [new branch] feature/1234-78900-Add-Feature -> feature/1234-78900-Add-FeatureAlready on 'feature/1234-78900-Add-Feature'
Summary of actions:- A new remote branch 'feature/1234-78900-Add-Feature' was created- The local branch 'feature/1234-78900-Add-Feature' was configured to track the remote branch- You are now on branch 'feature/1234-78900-Add-Feature'
# Another user on another computer:> git fetch> git checkout feature/1234-78900-Add-Feature...> git fetch; git rebase origin/feature/1234-78900-Add-Feature...> git push origin feature/1234-78900-Add-Feature
Publish Feature
> git-flow feature finish 1234-78900-Add-Feature
Switched to branch 'develop'Already up-to-date.Deleted branch feature/1234-78900-Add-Feature (was f135b69).
Summary of actions:- The feature branch 'feature/1234-78900-Add-Feature' was merged into 'develop'- Feature branch 'feature/1234-78900-Add-Feature' has been removed- You are now on branch 'develop'
> git push origin developTotal 0 (delta 0), reused 0 (delta 0)remote: bb/acl: kbasarab is allowed. accepted payload.To test.git f22f2d0..f135b69 develop -> develop
> git push origin :feature/1234-78900-Add-Featureremote: bb/acl: kbasarab is allowed. accepted payload.To test.git - [deleted] feature/1234-78900-Add-Feature
Finish Feature
> git-flow release start 2013-03-14.0
Switched to a new branch 'release/2013-03-14.0'
Summary of actions:- A new branch 'release/2013-03-14.0' was created, based on 'develop'- You are now on branch 'release/2013-03-14.0'
Follow-up actions:- Bump the version number now!- Start committing last-minute fixes in preparing your release- When done, run:
git flow release finish '2013-03-14.0'
> git push origin release/2013-03-14.0Total 0 (delta 0), reused 0 (delta 0)remote: bb/acl: kbasarab is allowed. accepted payload.To test.git * [new branch] release/2013-03-14.0 -> release/2013-03-14.0
Create release
> git-flow release finish 2013-03-14.0
Switched to branch 'master'Merge made by the 'recursive' strategy. example.txt | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-)Deleted branch release/2013-03-14.0 (was f135b69).
Summary of actions:- Latest objects have been fetched from 'origin'- Release branch has been merged into 'master'- The release was tagged '2013-03-14.0'- Release branch has been back-merged into 'develop'- Release branch 'release/2013-03-14.0' has been deleted
> git push origin :release/2013-03-14.0remote: bb/acl: kbasarab is allowed. accepted payload.To test.git - [deleted] release/2013-03-14.0
Finish Release
> git push --tags
Counting objects: 2, done.Delta compression using up to 4 threads.Compressing objects: 100% (2/2), done.Writing objects: 100% (2/2), 352 bytes, done.Total 2 (delta 0), reused 0 (delta 0)remote: bb/acl: kbasarab is allowed. accepted payload.To test.git * [new tag] 2013-03-14.0 -> 2013-03-14.0
Finish Release
> git-flow hotfix start 2013-03-17.0Switched to a new branch 'hotfix/2013-03-17.0'
Summary of actions:- A new branch 'hotfix/2013-03-17.0' was created, based on 'master'- You are now on branch 'hotfix/2013-03-17.0'
Follow-up actions:- Bump the version number now!- Start committing your hot fixes- When done, run:
git flow hotfix finish '2013-03-17.0'
> ... Commits
> git-flow hotfix finish 2013-03-17.0
> git push origin master> git push --tags
Hotfix
● http://www.mediacurrent.com/blog/webinar-git-intro
● http://nvie.com/posts/a-successful-git-branching-model/
● http://datasift.github.com/gitflow/IntroducingGitFlow.html
Resources