This appendix is a guide for CVS users new to Subversion.
It's essentially a list of differences between the two systems
as “viewed from 10,000 feet”. For each section, we
provide backreferences to relevant chapters when
possible.
Although the goal of Subversion is to take over the current
and future CVS user base, some new features and design changes
were required to fix certain “broken” behaviors
that CVS had. This means that, as a CVS user, you may need to
break habits—ones that you forgot were odd to begin
with.
Revision Numbers Are Different Now
In CVS, revision numbers are per-file. This is because CVS
stores its data in RCS files; each file has a corresponding RCS
file in the repository, and the repository is roughly laid out
according to the structure of your project tree.
In Subversion, the repository looks like a single
filesystem. Each commit results in an entirely new filesystem
tree; in essence, the repository is an array of trees. Each of
these trees is labeled with a single revision number. When
someone talks about “revision 54”, they're talking
about a particular tree (and indirectly, the way the filesystem
looked after the 54th commit).
Technically, it's not valid to talk about “revision 5
of foo.c
”. Instead, one would say
“
foo.c
as it appears in revision
5”. Also, be careful when making assumptions about the
evolution of a file. In CVS, revisions 5 and 6 of
foo.c
are always different. In Subversion,
it's most likely that foo.c
did
not
change between revisions 5 and
6.
For more details on this topic, see
the section called “Revisions”.