Working with CVS branches
Working with CVS branches
Changelog:
-
2015-03-17: Don't move update tags; use new tags for each update.
Introduction
These instructions cover current best practice on how to maintain CVS branches.
The following tag conventions are used:
Tag | Purpose |
---|---|
branch-base |
Branch point off head |
branch-baseITERATION |
ITERATION update from HEAD since branch-base. Different conventions exist for ITERATION, including incrementing serial number, or using a YYYYMMDD date. |
The following shell variables are used:
Variable | Purpose |
---|---|
${branch} |
Branch name |
${module} |
CVS module |
${old} |
Old (previous) update/merge tag |
${new} |
New (current) update/merge tag |
To create a branch
-
Tag the set of sources you want to branch with a command like:
cvs rtag -r HEAD ${branch}-base ${module}
This tag represents the original branch point and will not be moved during the lifetime of the branch.
-
Branch them with the command:
cvs rtag -b -r ${branch}-base ${branch} ${module}
Update the branch to reflect changes in HEAD
-
Update your working source tree to be on the branch:
cvs update -P -r ${branch}
(in your working source tree)
-
Determine appropriate values for the variables containing the tag names used for syncing the branch. The existing tags for the branch can be determined with:
cvs status -v somefile | grep ${branch}
If this is the first update, use:
${old}
${branch}-base
${new}
${branch}-base1
If this is a subsequent update, use:
${old}
${branch}-baseCURRENT
${new}
${branch}-baseNEXT
-
Make a tag which represents the new base you're moving to:
cvs rtag -F -r HEAD ${new} ${module}
-
Merge changes between the old and new base of your branch:
cvs update -j ${old} -j ${new}
(in your working source tree)
-
Merge conflicts, etc.
-
Check in your changes (to the branch).