GitFlow Examples

These examples are illustrating the usage of the supported GitFlow workflow in GitVersion. To enable this workflow, the builtin template GitFlow/v1 needs to be referenced in the configuration as follows:

workflow: GitFlow/v1
mode: ContinuousDelivery

Where the continuous deployment mode for no branches, the continuous delivery mode for main, support and develop branches and the manual deployment mode for release, feature, hotfix and unknown branches are specified.

This configuration allows you to publish CI (Continuous Integration) builds from main, support and develop branches to an artifact repository. All other branches are manually published. Read more about this at version increments.

The continuous delivery mode has been used for the main and the support branch in this examples (specified as a fallback on the root configuration layer) to illustrate how the version increments are applied. In production context the continuous deployment mode might be a better option when e.g. the release process is automated or the commits are tagged by the pipeline automatically.

Feature Branches

Feature branches can be used in the GitFlow workflow to implement a feature in an isolated environment. Feature branches will take the feature branch name and use that as the pre-release label. Feature branches will be created from a develop, release, main, support or hotfix branch.

Create feature branch from main

GitFlow

After the feature branch is merged, the version on main is 2.0.0-5. This is due to main running in continuous delivery mode. If main was configured to use continuous deployment the version would be 2.0.0.

Create feature branch from develop

GitFlow

After the feature branch is merged, the version on develop is 1.3.0-alpha.3. This is due to develop running in continuous delivery mode. If develop was configured to use manual deployment the version would still be 1.3.0-alpha.1 and you would have to use pre-release tags to increment the pre-release label alpha.1.

Hotfix Branches

Hotfix branches are used when you need to do a patch release in the GitFlow workflow and are always created from main branch.

Create hotfix branch

GitFlow

Create hotfix branch with version number

GitFlow

Release Branches

Release branches are used for major and minor releases to stabilize a RC (Release Candidate) or to integrate features (in parallel) targeting different iterations. Release branches are taken from main (or from develop) and will be merged back afterwards. Finally the main branch is tagged with the released version.

Release branches can be used in the GitFlow as well as GitHubFlow workflow. Sometimes you want to start on a large feature which may take a while to stabilize so you want to keep it off main. In these scenarios you can either create a long lived feature branch (if you do not know the version number this large feature will go into, and it's non-breaking) otherwise you can create a release branch for the next major version. You can then submit pull requests to the long lived feature branch or the release branch.

Create release branch

GitFlow

Create release branch with version

GitFlow

Develop Branch

GitFlow

Support Branches

Support branches are not really covered in GitFlow, but are essential if you need to maintain multiple major versions at the same time. You could use support branches for supporting minor releases as well. If you are just supporting the majors, then name your branch support/<major>.x (i.e support/1.x), to support minors use support/<major>.<minor>.x or support/<major>.<minor>.0. (i.e support/1.3.x or support/1.3.0)

GitFlow

Depending on what you name your support branch, you may or may not need a hotfix branch. Naming it support/1.x will automatically bump the patch, if you name it support/1.3.0 then the version in branch name rule will kick in and the patch will not automatically bump, meaning you have to use hotfix branches.

To Contribute

See contributing examples.

Source

See DocumentationSamplesForGitFlow.cs. To update, modify then run test.

GitHub