[much of my reply echos Chris but elaborate]
Don't touch CVS unless you absolutely have to. SVN is also
distinctly old now.
SVN had its place, but branching/merging is a pain (well, branching is
pretty easy, it's the merging that hurts).
Mercurial and git are superior, in my experience.
Between those two (hg and git), though, it's really hard to call.
I'm personally familiar with git, and it serves me well; others
have the same experience with hg. Either will do you fine.
A few pros (+) and cons (-) from my experiences:
+hg: much easier to transition from CVS/SVN as the command-line
syntax/structure matches much more closely
-git: the command-line interface feels rather distant from the
CVS/SVN classics
+hg: better cross-platform (i.e., including Win32) support
-git: a bit persnickity on Win32
-hg: last I checked, can't do octopus merges (merges with more than
two parents)
+git: can do octopus merges
-/+ hg: certain power-user functionality is relegated to plugins that
you need to activate (though many come standard, you have to activate
them) This can be a plus if you don't want to have a foot-gun within
easy reach; this can be an annoyance if you regularly use those sorts
of tools appropriately (particularly the partial-commit that "git add
-p" provides)
+git: the internal data model is pretty simple making it easy to
understand where things stand and the status of various branches
+git: having multiple remotes and managing them feel a little easier
to me than with Mercurial (YMMV)
+hg: written in Python (with optional C component for some
CPU-intensive work, but can run without it if you don't have
compile-rights on a particular machine that does already have Python
installed)
-git: a hodge-podge of C, Perl, shell-scripts and other madness.
This is part of the Win32 ding above.
+hg: Python devs have chosen Mercurial as their VCS of choice
+hg: bitbucket hosting
+git: github, gitorious, bitbucket hosting
+git, +hg: both have lots of big-name projects using them
+git, +hg: both have reasonably painless ways of talking to
repositories of other flavors (git can talk to CVS/SVN/hg repos; hg
can talk to CVS/SVN/git repos)
+git, +hg: documentation on both is top-notch (git's available
documentation has radically improved since it's grand suckage before
1.6; once 1.6 landed, git was far less user-hostile)
Given the choice, I eventually settled on git (after about 3-4
serious attempts to learn it, then giving up for a couple months and
retrying) unless I have to involve Win32 machines, as I like the
power it provides and how easy it is to understand in my head.
On Win32, I tend to bias towards Mercurial. There are still some
aspects of Mercurial's internal models that leave me scratching my
head and rummaging through the docs (public vs. private branches,
bookmarking, preferring cloning to make branches) and surrendering
occasionally on more obscure things I know that I *should* be able to
do. That said, if you just want solid VCS behavior and already know
CVS/SVN, Mercurial will give you an easier transition.
And I believe most of what can be said about Mercurial can also be
said about Bazaar (bzr), though it seems to have less mindshare,
except perhaps among Ubuntu developers, as it has tighter integration
with LaunchPad.
Fortunately, since git/hg/bzr are all free, you can download them all
and kick the tires to see which one fits YOU (the OP) best.
-tkc