Skip to content
kellymclaughlin edited this page Apr 11, 2013 · 4 revisions

Riak CS uses the git-flow branching model with a few customizations to better suit our needs. This page documents our deviations from the standard workflow described in the original git-flow post.

Branch prefixes

The standard git-flow model makes use of three standard branch prefixes with names that are indicative of the branch's purpose. These are: release/, feature/, and hotfix/. Note: The / is our chosen delimiter. Others may choose to use - or some other delimiter.

Additionally, there are other branch prefixes we use. These are: bugfix/ and refactor/.

A bugfix/* branch is different from a hotfix/* branch in that it fixes a bug whose level of severity does not merit the immediate creation of a new release to be issued to customers and users. bugfix/* branches are hopefully much more common than hotfix/* branches.

A refactor/* branch represents a change to the code that neither fixes a bug nor represents a new feature. Instead it is a change that represents code maintenance, cleanup, refactoring, or any other change aimed soley at improving the clarity and maintainability of the code.

Bug fixes and long-running release branches

The git-flow model also prescribes that release branches should be deleted once the release is merged and tagged on master and the release branch is also merged to develop. We have instead decided to have long-running release branches for a Major.Minor release.

Branches for bug fixes that are eligible for inclusion in a point release for the current Major.Minor version should be branched from the most recent release branch and then merged into that release branch once accepted. This ensures that all appropriate changes are present if the decision is made to cut another point release. The determination of eligibility for inclusion in a point release may be obvious or may require discussion among team members.

The most recent release branch should also be merged to the develop branch as needed to keep develop current with the latest bug fixes.

If a bugfix is minor and not eligible for inclusion in a point release, the bugfix branch should be both branched off of and merged directly into develop.

In the case that there is a need to have more than one long-running release branch, only changes to the most recent release branch should be merged to develop unless it is the case that a bug only appears in an old release branch and is also present in the develop branch. This would mean the bug is not present in the most recent release branch; therefore, this case should be exceedingly rare.