Version Control
The importance of using version control (VC) to help manage a software
development process cannot be underemphasized.
A little background:
SCCS and RCS basically operate at the same level. SCCS is older, and
there was no open source version available until recently, so it was
not available on all platforms. RCS has been around a long time, and
the source code has been freely available. Emacs has a vc facility
that allows the user to manipulate both RCS and SCCS files transparently.
CVS
is a system that works on top of RCS. Originally, CVS called RCS
programs, now the RCS functionality is folded into CVS. CVS allows
developers to operate on files in a concurrent fashion, whereas RCS
and SCCS are really set up for locking files so that others cannot
modify them. If two developers modify the same file, CVS attempts to
merge the changes, and if the changes cannot be merged, it notes the
conflict.
Here's what we get with CVS and version control in general.
- CVS provides platform independence. I can check out the Ptolemy II
system under NT with Cygwin or under Solaris, and the CRNLs or NLs in
text files are handled properly
- The directory structure of the package is automatically generated
when I do 'cvs checkout ptII'. This means I can build a tree
in no time, try out something wild, and then abandon the tree or
check in my changes as I choose.
- CVS allows for concurrent modification of files. Yes, problems
can result, but this is a serious win. Professor Lee can hack away on
his laptop while traveling, and then easily check in all his changes
when he dials in. This is a big win.
- Fixing bugs is much easier. I can narrow the time the bug was
introduced down by checking out trees from different dates and then
running a test. I can then look at the log messages for the
files that were changed when the bug was introduced and get an idea
what was causing the problem. Or, I can tell the author that their
changes broke something, and that they need to have a look.
Version control is a serious win for having accountability.
- The GSRC machine gigasource.eecs.berkeley.edu provides CVS support so
that projects with developers in more than one university can easily
set up and share a development tree.
- CVS can handle binary files, so I can check in jar files
(collections of java .class files), and PDF files. Basically,
the entire release that we ship is checked in to CVS. This
makes it very easy to create interim developer's releases
- By using CVS branches, I can easily create a release tree.
I freeze the features of the release tree, and then fix bugs in
the master tree and the release tree. The changes I made
are visible in the log file, as is the location where I made the
branch.
- The CVS module facility seems like it could be of use in
software systems that include subsystems
- There are web based interfaces to CVS. Lots of projects are doing
distributed development with CVS.
- CVS and version control systems in general are an excellent form
of backup. When I work on a website, I put it under CVS, so then if I
destroy a file, I can easily get a recent copy without bothering
the backup operator. I work on a PC, but my files are in CVS
repositories on reliable and backed up Unix boxes.
|