Just recently started using a CVS replacement called Subversion. Thus far, seems very good.
It’s big advantage is it recognizes directories as well as files. Uses binary differences for binary files, rather than storing a completely new copy of the file. Allows for renaming/copying of files and directories. Understands what deletion of a directory means.
The other big thing is it understands a big change. i.e. it treats a commit of multiple files as a unit of work. The revision numbers are updated for an entire directory when a commit is done, and are global across a repository. This means can see all the files changed for a given commit, rather than CVSs approach of merely incrementing the revision of each file individually.
The claim is that Subversion is more network friendly. It does this by basically keeping a local copy of the files in your working directory. The feeling is that hard drive space is really inexpensive, and network traffic is best minimized.
Supports branching more elegantly than CVS ever did. A branch is created by making a copy of a repository directory. Has commands for retrieving some changes and merging, but I haven’t used this portion yet, so don’t know how useful it is.
There is a tool for converting a CVS repository to an SVN one. I tried running it, but I must have mixed up my tags when I originally created my repository as it complained. Since I don’t really care that much about my change history, I didn’t bother trying to track it down to get my repository imported to SVN. I just started fresh.
Well worth a look.