We recently made the switch to Git-Flow at AE. So far it has proven to be quite amazing at managing features, but we’ve needed to make a few tweaks to the hotfix process to meet our fast paced changes.

Hotfixes

Hotfixes are branched from master, and mostly used to manage quick (sometimes unplanned) changes to the environment. In his branching model, Vincent Driessen has said as such:

The essence is that work of team members (on the develop branch) can continue, while another person is preparing a quick production fix.

Managing Continuous Updates

What if these quick production fixes are constantly coming in? At AE, we have a team of developers who work on features branched from development, and another team working on our continuous site updates regarding daily marketing, pricing changes, promotions, etc. Because this team’s code is deploying to production almost daily, we have chosen a hotfix workflow for them.

Multiple Hotfixes

This has been a question about Git-Flow for a while. It does not allow for multiple hotfixes out of the box, yet we often times are working on multiple production marketing changes at a time. On larger retail weeks, we may be writing code for four or five different pushes simultaneously, to be released to production on specific short term time frames.

To solve this, there are two options we’ve gone over: first, I’ve created a fork that allows for multiple hotfixes via a gitconfig parameter. Since editing the Git-Flow source seems a bit risky, for the time being we’ve employed the following strategy:

git checkout -b HOTFIXBRANCH origin/master

git flow hotfix start HOTFIXRELEASE

git merge origin/HOTFIXBRANCH

git flow hotfix finish HOTFIXRELEASE
  1. Checkout any number of branches for the upcoming hotfixes. This will allow multiple to be worked on simultaneously.
  2. Start a hotfix release branch using Git-Flow.
  3. Once a particular branch is tested and ready to go, merge it into the hotfix release branch.
  4. If there is only a hotfix deployment that day, push from the hotfix release branch. Once the push is verified, finish the hotfix branch.
  5. If there are also features going live, finish the hotfix release, and cut a release branch.

This allows us to manage multiple hotfixes at a time, alongside multiple features. A note however; This flow is definitely still in it’s infancy. How are you managing Git-Flow? What is your process? I’d love to hear your suggestions!