Skip to content

Instantly share code, notes, and snippets.

@coxandrew
Created July 25, 2012 15:43
Show Gist options
  • Save coxandrew/3176840 to your computer and use it in GitHub Desktop.
Save coxandrew/3176840 to your computer and use it in GitHub Desktop.
Git release branching workflow
#!/bin/bash
set -eux
## ***************************************************************************
## Reset local and remote repositories
## ***************************************************************************
REMOTE_REPOSITORY=~/scm/git-flow-ex
DEVELOPER_CHECKOUT=~/dev/git-flow-ex
rm -rf $REMOTE_REPOSITORY
mkdir -p $REMOTE_REPOSITORY
rm -rf $DEVELOPER_CHECKOUT
mkdir -p $DEVELOPER_CHECKOUT
cd $REMOTE_REPOSITORY
git init --bare
## ***************************************************************************
## Set up local repository
## ***************************************************************************
cd $DEVELOPER_CHECKOUT
git init
git remote add origin $REMOTE_REPOSITORY
echo "Sample git repo with release branches" > README.md
git add README.md
git commit -m "Initial commit"
git push origin master
## ***************************************************************************
## Start work on a new project
## ***************************************************************************
echo "working ... `date`" >> file1.txt
git add file1.txt
git commit -am "Work: `date`"
git push origin master
echo "working ... `date`" >> file1.txt
git commit -am "Work: `date`"
git push origin master
echo "working ... `date`" >> file1.txt
git commit -am "Work: `date`"
git push origin master
## ***************************************************************************
## Create a release branch for major release 1.0.0
## ***************************************************************************
git checkout -b release/v1.0.0
## Create a long-living remote branch for this release
git push origin release/v1.0.0
## Only bug fixing at this point
echo "release fix ... `date`" >> file1.txt
git commit -am "ReleaseFix: `date`"
git push origin release/v1.0.0
## Tag and release
git tag -a v1.0.0 -m "Version 1.0.0"
git push --tags
## Merge back into master
git checkout master
git merge --no-ff v1.0.0
git push origin master
## ***************************************************************************
## Add new features to master branch
## ***************************************************************************
# Feature feature feature
echo "feature ... `date`" >> file2.txt
git add file2.txt
git commit -am "FeatureWork2: `date`"
git push origin master
echo "working ... `date`" >> file2.txt
git commit -am "FeatureWork2: `date`"
git push origin master
echo "working ... `date`" >> file2.txt
git commit -am "FeatureWork2: `date`"
git push origin master
## ***************************************************************************
## Branch for 1.1.0 release off the HEAD of master
## ***************************************************************************
git checkout -b release/v1.1.0
git push origin release/v1.1.0
## Only bug fixing at this point
echo "release fix ... `date`" >> file2.txt
git commit -am "ReleaseFix: `date`"
git push origin release/v1.1.0
echo "release fix ... `date`" >> file2.txt
git commit -am "ReleaseFix: `date`"
git push origin release/v1.1.0
## Tag and release
git tag -a v1.1.0 -m "Version 1.1.0"
git push --tags
## Merge back into master
git checkout master
git merge --no-ff release/v1.0.0
git push origin master
## ***************************************************************************
## Add new features to master branch
## ***************************************************************************
## Feature feature feature
echo "feature ... `date`" >> file3.txt
git add file3.txt
git commit -am "FeatureWork3: `date`"
git push origin master
echo "working ... `date`" >> file3.txt
git commit -am "FeatureWork3: `date`"
git push origin master
echo "working ... `date`" >> file3.txt
git commit -am "FeatureWork3: `date`"
git push origin master
## ***************************************************************************
## Branch for 2.0.0 release off the HEAD of master
## ***************************************************************************
git checkout -b release/v2.0.0
## Only bug fixing at this point
echo "release fix ... `date`" >> file3.txt
git commit -am "ReleaseFix: `date`"
git push origin release/v2.0.0
echo "release fix ... `date`" >> file3.txt
git commit -am "ReleaseFix: `date`"
git push origin release/v2.0.0
## Tag and release
git tag -a v2.0.0 -m "Version 2.0.0"
git push --tags
## Merge back into master
git checkout master
git merge --no-ff release/v2.0.0
git push origin master
## ***************************************************************************
## Create a hotfix branch for patch release 1.0.1 off the v1.0.0 tag
##
## * This is a short-lived, local branch, so don't push it to the remote
## ***************************************************************************
git checkout -b release/v1.0.1 v1.0.0
## Patch bug fix
echo "patch fix ... `date`" >> file1.txt
git commit -am "PatchFix: `date`"
## Tag and release
git tag -a v1.0.1 -m "Version 1.0.1"
git push --tags
## Merge forward to both v1.0.0 and master
git checkout release/v1.0.0
git merge --no-ff release/v1.0.1
git push origin release/v1.0.0
# Merge forward to 2.0.0
git checkout release/v2.0.0
git merge --no-ff release/v1.0.1
git push origin release/v2.0.0
## Merge forward to master
git checkout master
git merge --no-ff release/v2.0.0
git push origin master
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment