Re: Linux 1.3.45 change log

Eric Smith (eric@goonsquad.spies.com)
Mon, 4 Dec 95 14:53 PST


I second Todd Fries' recommendations for using CVS to manage Linux source
control. We used it very successfully at Telebit to manage the source
tree for our NetBlazer multiprotocol router product line. As Todd said,
it allowed us to manage multiple branches of the tree, some of which would
eventually merge back into the main branch. Also, once it is set up it is
much easier to use than straight RCS.

At Telebit we kept our source repository on a single server which everyone
NFS mounted. Unfortunately NFS has enough problems with locking and with
data corruption (because of use of UDP with no error checking) that we found
it necessary to commit all changes on the server. With CVS 1.5 this is no
longer necessary because they have implemented their own safe file access
protocol as part of the package (though it is still possible to use the
Nightmare File System if you really want to).

In case it isn't totally obvious how CVS works, the general gist of it is
that individuals use CVS to check out a local copy of the entire source
tree (or just specific modules). Unlike RCS, you don't have to lock files
you want to change and deal with others having locked them. (How many times
we had to break other people's locks if they weren't around back in the old
days before CVS!) When you are ready to merge your local changes into the
source tree (hopefully after you've tested them!), you just say "cvs commit",
and CVS does all the work. If no one else has checked in newer versions of
the files than you originally started hacking, everything gets checked in
automatically. If there are newer versions, CVS will advise you to do a
"cvs update", which will merge in all the new changes from the repository.
If there are any conflicts, they will be clearly flagged in the local copy
so you can manually resolve them.

Of course, I haven't explained any of the features for supporting multiple
branches, or the security provisions, but it's all fairly straightforward.

The only problem with CVS we had at Telebit was when we tried to do this:

base-------------->intermediate--------->merged---->changes------->second
version \ versions ---->version ------>merge
\ / /
\ / /
----->new--------------------->more changes----------->
branch on branch

What we found with CVS 1.3 is that there were problems with doing
continued development on a branch that had already been merged, and
then trying to do a new merge. This might be fixed in CVS 1.5, but there
is a way to deal with it even in 1.3:

base------------>intermediate--------->merged---->changes------------->second
version \ versions ---->version \ ------>merge
\ / \ /
\ / \ /
--->new------------ -->another--
branch branch

This provides the same effect as the first approach but doesn't confuse
CVS 1.3

Cheers,
Eric
http://www.spies.com/~eric/