Skip to content

Branches and Versioning

John Haddon edited this page Apr 2, 2020 · 7 revisions

Overview

At any one time, we are actively developing three different versions of Gaffer, each on a separate branch in the main repository :

  • The next major version scheduled for release is developed on the master branch. This branch receives new backwards-incompatible features, and other changes we consider too big or risky for a minor release.
  • The current major version is maintained on a branch named <currentMajorVersion>_maintenance, which is 0.56_maintenance at the time of writing. This branch receives new backwards-compatible features and bug fixes.
  • The previous major version is maintained on a branch named <previousMajorVersion>_maintenance, which is 0.55_maintenance at the time of writing. This branch receives bug fixes only.

All three branches are kept in a releasable state at all times. We make each pull request to the branch for the major version in which we want our code to be released.

Synchronisation

When making a bugfix to the previous major version, we naturally want to ensure that the same fix will be included in the next release of the current major version, and in any forthcoming release from master. Likewise, we want new features developed for the current major version to also be available in the next major version. We achieve this by regularly merging forwards from the maintenance branches to the master branch. We do this as follows :

# Merge patches from previous to current major version
# ----------------------------------------------------

git checkout <previousMajorVersion>_maintenance
git pull upstream <previousMajorVersion>_maintenance

git checkout <currentMajorVersion>_maintenance
git pull upstream <currentMajorVersion>_maintenance
git merge <previousMajorVersion>_maintenance
# Edit Changes.md to copy new bug fixes into current major
# version.
git commit Changes.md
git push upstream <previousMajorVersion>_maintenance

# Merge features and patches from current major version to master
# ---------------------------------------------------------------

git checkout master
git pull upstream master
git merge <currentMajorVersion>_maintenance
git push upstream master
Clone this wiki locally