git

Just another successful Git Branching Model for flexible sprint cycle

July 8, 2014 · 11 min read

1.   Workflow description

Before going into explanation and definitions of different branches, we want to provide a global description of the work flow first. The workflow involves not only different branches but also different roles of people, different roles of testing servers. I assume that most of the participant’s roles are very familiar to you ( in other context, they are called stakeholders ), like “developers“, “quality controller“, “customer“, “project manager“, “release manager“…etc. From start, developer branch and master branch are the same. They are created initially at the same point; in the case that there is already a live production server running, they are created directly by mirroring exactly the same code based on the live production server. Team developers branch off every new feature or bug fixing branch from the develop branch. Each bug fix ticket has its own branch following a standard naming convention; each feature or new evolution has its own branch also following a standard naming convention. Developer works on the task for a bug or an evolution inside corresponding dedicated branch. When developer feels work done after tested on the development machine, he or she merges the branch into the “staging / internal integrated test branch“; then he or she logs into the internal integrated test server to perform a self integration test, to verify that the fix or task still works after merged with other team mates‘ code. After past the developer self testing, the bug fixing or the develop task then is marked as “resolved“. Quality controller team members screens all the “resolved“ tickets to know how many and which tickets needs to be tested at any given time. To start a test for a ticket, quality controller merge the corresponding bug fixing or feature branch into the “Developer test / Customer UAT branch“. Then, Quality controller logs into the Customer UAT server and perform integration test and / or any other tests, like regression test. When a ticket is past the test, it is possible that customer will verify the tested task on the Customer UAT server, since the customer will have access for the UAT server. When a ticket is tested by quality team and confirmed by customer on the Customer UAT server, the ticket is marked as “confirmed“ ( means ready to release ). At the end of the sprint cycle, quality team retrieve a list of the “confirmed“ tickets. This can be served as a report for the project manager or customer to know what work is ready to be delivered from the last sprint cycle. Project Manager (PM), or Release Manager (RM), screens all the “confirmed“ tickets to know how many and which tickets are pending for the next release. To start move tickets into release, PM or RM merge the corresponding ticket in to the “develop branch“. These tickets can be merged one by one, before finally push to the remote “develop branch“. After all the release content have been merged into the develop branch, PM or RM then merge the develop branch into the “master branch“, result is a new code change on the master branch. Each commit on master branch is corresponding to one time release. Optionally, each commit on the master branch can be assigned a tag to describe at give point what the release does. For the hot fix, it is very similar process to the normal bug fixing or feature release. The only difference is that the hot fix branch is branch off the “master branch“; and optionally, under customer’s urgent request, after it has been confirmed by test, it can be merged into “master branch“ to do a special earlier hot fix release.

2.   Branch definitions and explanations

There are 7 different types of branches: feature branches, bug fixing branches, hot fixing branchers, Staging / Internal integrated test branch, Develop test / Customer UAT branch, Develop branch and Master branch.

← Back to all posts