5.4 Branches and revisions
Ordinarily, a file's revision history is a linear
series of increments (see section Revision numbers):
| +-----+ +-----+ +-----+ +-----+ +-----+
! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !
+-----+ +-----+ +-----+ +-----+ +-----+
|
However, CVS is not limited to linear development. The
revision tree can be split into branches,
where each branch is a self-maintained line of
development. Changes made on one branch can easily be
moved back to the main trunk.
Each branch has a branch number, consisting of an
odd number of period-separated decimal integers. The
branch number is created by appending an integer to the
revision number where the corresponding branch forked
off. Having branch numbers allows more than one branch
to be forked off from a certain revision.
All revisions on a branch have revision numbers formed
by appending an ordinal number to the branch number.
The following figure illustrates branching with an
example.
| +-------------+
Branch 1.2.2.3.2 -> ! 1.2.2.3.2.1 !
/ +-------------+
/
/
+---------+ +---------+ +---------+
Branch 1.2.2 -> _! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 !
/ +---------+ +---------+ +---------+
/
/
+-----+ +-----+ +-----+ +-----+ +-----+
! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk
+-----+ +-----+ +-----+ +-----+ +-----+
!
!
! +---------+ +---------+ +---------+
Branch 1.2.4 -> +---! 1.2.4.1 !----! 1.2.4.2 !----! 1.2.4.3 !
+---------+ +---------+ +---------+
|
The exact details of how the branch number is
constructed is not something you normally need to be
concerned about, but here is how it works: When
CVS creates a branch number it picks the first
unused even integer, starting with 2. So when you want
to create a branch from revision 6.4 it will be
numbered 6.4.2. All branch numbers ending in a zero
(such as 6.4.0) are used internally by CVS
(see section Magic branch numbers). The branch 1.1.1 has a
special meaning. See section Tracking third-party sources.