geoff@laxan.comOf course the old RCS didn't use a centralized repository, which made it harder to coordinate work among teams. It made heavy use of locking (only one checkout allowed at a time, unless you override) to deal with this. CVS is basically the same as RCS except that history is recorded centrally and the checkouts aren't locked.
Subversion isn't (yet) quite as good as you might imagine at recording file move or rename operations. It does store the ‘copy-from’ information, but it doesn't distinguish a copy from a rename or move, except that in the latter case the original file is deleted in the same revision as the new one is created.
With a FSFS repository (which is the default with modern versions of Subversion) it probably is possible to ‘undo’ a revision by carefully deleting the files created when it was committed, but I wouldn't recommend it. You can always recover from mistakes by pulling older versions of files out of earlier revisions.
svnadmin create)svn co)svn mkdirsvn addsvn statussvn cisvn updateHere's roughly what I did as an example:
svnadmin create repos svn co file://$(pwd)/repos foo cd foo svn mkdir trunk tags branches svn st svn ci svn mkdir trunk/src vim trunk/src/hello.pl svn st svn add trunk/src/hello.pl svn ci # edit the file svn ci svn st svn diff svn log svn up svn log svn log -v --xml svn log -v svn diff -r 2:3
These three top-level directories are just normal directories. There's nothing special about them, and their names and locations are just a convention. You can organize repositories differently if you want.
So to create a tag or branch you just copy the ‘trunk’ directory from the revision you want to start with. You can make changes in a branch in parallel with the mainline development, and then merge them into the trunk when you're ready, although you have to keep track of which branches have been merged, and when, yourself. This is usually done by leaving annotations in log messages.
svn co svn+ssh://hostname/path fooBoth svnserve and HTTP access allow users to checkout a working copy without having to have an account (if that's what you want), and can be configured to use various authentication systems. SSH access is easy to set up (you just need an SSH server running on the machine with the repository) but you have to create an account for each user.
TortoiseSVN is apparently stable and widely used, but the cross-platform and Linux GUI clients are still quite young.