In the Team Foundation forum a question was asked regarding CVS compared to Team Foundation Version Control. Here's what I wrote.
Of course, Team Foundation is much more than version control since we have integrated work item tracking, reporting, etc.
I'm biased, of course, and I'm probably leaving stuff out. I've used CVS in the past, but I wasn't exactly a power user. Okay, here goes.
TFS has atomic checkins. When you check in, it all succeeds or fails. No changes are committed unless the whole thing succeeds. CVS does not have this.
TFS has shelving, and CVS does not. Shelving is a great way to juggle sets of changes as well as backup changes without checking them in.
TFS has a SQL database for the server, and CVS does not. This means that adminstering it uses the same tools famililar to database admins (in beta 2, there is ADAM data not in SQL, but ADAM has been removed -- ignore this comment if it doesn't mean anything to you).
CVS and TFS both support parallel development. Everyone checks out and modifies files and resolves conflicts before checking in. There's no need to grab an exclusive lock.
CVS does a better job with "offline" mode than TFS in version 1. It's inherent to CVS because you just modify files and then sync up with the repository before checking in. When you pend an edit in TFS, you must be able to talk to the server to do it. We'll be doing a lot more for offline support in the next version.
TFS branches in path space, which means that branch is a lot like copy. CVS branches are different. Branches in TFS can have different permissions (main vs. release branches).
TFS has checkin policies, and CVS does not.
TFS supports rename/move, but CVS does not.
The TFS command line, h.exe, has really nice dialogs for command like checkin, shelve, and resolving conflicts (there's also a /noprompt option to suppress dialogs). CVS doesn't have that.
TFS comes with a full GUI, either VS 2005 or the Team Foundation Client (to be renamed Team Explorer). CVS does not have a GUI itself, though there are several available.
TFS uses its SQL server for history queries. CVS doesn't have that support.
TFS uses SOAP over HTTP (or HTTPS) to communicate with the server. You don't need to open other ports or tunnel through ssh for remote access as you would for CVS.
TFS stores files compressed as reverse deltas (diffs from one version to the next). CVS can't do that.
CVS and TFS both have branch and merge capabilities, but the changesets used by TFS make it easier to manage.