News

20080109 Fighting CVS

Fighting CVS

Intro

CVS is the name of a SCM tool.

It doesn't help much, to explain acronyms using acronyms, does it?

Well then. CVS stands for concurrent versions system and SCM stands for either software configuration management or for source code management.

What CVS does is known as (centralized) revision control. You'll find info on that in this great visual guide to version control.

CVS and Subversion

I never got to like CVS, because I started to use version control with Subversion, which was written specifically to replace CVS. Subversion seems to me a lot less complicated to understand. You can learn the Subversion essentials in about 1 hour from the Subversion book. This even includes the basics of the "advanced" revision control concepts, namely branching and tagging!

My problem is now, that for one of my projects I have to deal with CVS in a more elaborate way than just use it to download source code. And this has to do with tagging.

Tags are used for marking a certain point in time (and so a certain status of the versioned files) with a name you can remember. One easy to comprehend use case is nameing release versions. If one day you want to see, what your source code looked like for release 1.0.3c, you better tagged that, because if you're anything like me, you won't remember of which versions of which files (for CVS; for Subversion you need only to remember one number) made up that release. After all, as you have a SCM tool, that's just one of the things you'd certainly want the tool to do for you, right?

The problem

For my project I need to go back in time, becaue I departed it about two years ago. Luckily I wrote down the version of gccxml, that I used: Version 0.6.0. There surely is a tag for that... but what's its name?

The tasks and how to perform them

So here is how I found the tag name to use:

[dj@localhost gccxml]$ cvs status -v -l
cvs status: Examining .

...

===================================================================
File: README            Status: Up-to-date

   Working revision:    1.2
   Repository revision: 1.2     /cvsroot/GCC_XML/gccxml/README,v
   Sticky Tag:          (none)
   Sticky Date:         (none)
   Sticky Options:      (none)

   Existing Tags:
        gccxml-gcc42-mp1-post           (revision: 1.1)
        gccxml-gcc42-mp1                (revision: 1.1)
        gccxml-gcc42-mp1-pre            (revision: 1.1)
        gccxml-gcc42                    (branch: 1.1.4)
        gccxml-gcc42-bp                 (revision: 1.1)
        gccxml-0-6-0                    (revision: 1.1)
        gccxml-0-6                      (branch: 1.1.2)
        gccxml-0-6-bp                   (revision: 1.1)

...

[dj@localhost gccxml]$ 

Tadaaaa! Now all that is left is to find out, how the different tags gccxml-0-6* differ from each other.

I'll just start off with the gccxml-0-6:

[dj@localhost gccxml]$ cvs update -r gccxml-0-6