Created
July 25, 2012 15:43
-
-
Save coxandrew/3176840 to your computer and use it in GitHub Desktop.
Git release branching workflow
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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