Release engineering and methodology with CVS branching and merging

Release engineering is the collection of methods, tools and techniques for managing software products releases. Projects using CVS need to define a release cycle in order to facilitate the addition and integration of new features and bug fixes. This document described my own release engineering methodology based on CVS and three branches (Main trunk, new-release branches and new feature branches)

Create new branch for new features

New features that require important change in the code are developed in a separate new branch (one branch per feature). The following rules must be followed :

  • The new feature branch is created from the head of latest stable version which corresponds to the head version of the MAIN branch (or Trunk).
  cvs rtag -b FEATURE MODULE
  cvs update -r FEATURE
  • Once the new feature is finished and preliminary tests were done, the developer can merge the new feature to the MAIN branch.
  cvs checkout -j MAIN -j FEATURE MODULE
  • The developer then must test the new feature in the MAIN branch to make sure the new changes do not conflict with changes from other new features.

Preparing a new release

Once the MAIN branch is stable enough, and we decide to make a new release

  • Merging to the MAIN branch is frozen
  • Publish release candidates in regular basis. Each release candidate is marked by a tag in the MAIN branch. The RC are meant for testing and final checks before the official release.
  cvs rtag REL-X-X-RCx MODULE
  • After 1~2 release candidates, create a branch for the official release. The branch is created from the latest version of the MAIN branch
  cvs rtag -b REL-X-X MODULE
  • Build and package the official release and make it public
  • Continue bug fixing on the new branch. The MAIN now can accept merges of new features.

Maintaining a release branch

  • If a bug is discovered in a release, it is fixed in the release branch, then, a new minor release (with an incremented minor version) is released. ( e.g. 0.0.5 → 0.0.6 ). The new minor release is marked by a new tag in the same branch.
  • After creating a new minor release, the changes are merged to the MAIN branch.
  cvs checkout -j MAIN -j REL-X-X MODULE


Miscellaneous commands

Removing a branch tag :

cvs rtag -d -B BRANCH-TAG MODULE

Removing revisions

cvs admin -o 1.6.4.1:1.6.4.5 file.c

Merging from some branch into working branch

cvs update -j HEAD
cvs update -j FEATURE






Wireless Internet Security Performance RADIUS server


Wireless Internet Security Performance RADIUS server Wireless Internet Security Performance RADIUS server