There comes a time when version control becomes a necessity; that's when Subversion comes to the rescue. Having worked with both CVS and Subversion, I recommend avoiding the baroque intricacies of CVS for the simplicity of Subversion. This is specially true if you have a project with an evolving source tree. Follow the links above for an introduction to Subversion.
There are a few things to note however, when attempting to use Xcode 3.1 with Subversion 1.5.x. It seems that Xcode is hardwired to verify the repository version. A repository created with the 1.4 version of the svnadmin returns a version identifier of 2, whereas the 1.5 of the command creates a version 3 repository. This may have to do with the back end databases used by the repository. Without significant hacking, it seems like a lot of work with marginal benefit. For now, I'd recommend using the packaged 1.4.4 that comes with OS X 10.5.5.
One last thing: it seems that launchctl will be the default method for managing startup daemons going forward in OS X. This means that the older SystemStarter service will be deprecated in the near future. There is an article at The Wishing Line which discussed a method for automating svnserve startups using launchctl. Be sure to modify the .plist to use the correct paths for your binaries and repository. As with PostgreSQL, I created symbol links from /usr/local to the actual repository to keep a clean separation between the system defaults versus any customizations that I introduce into my computing environment through 3rd party applications.
With OS X 10.5.5, I found that the 1.4.4 version of svnserve included with the developer tools was located in the /usr/bin directory. You can verify this on your system with the following command:
# which svnserve
Take note of the path returned by this command; it is necessary for the .plist file.
One last customization to the .plist file was changing the default --daemon command argument and replacing it with the --tunnel argument to support svn+ssh. If you plan to use this feature for a network accessible Subversion server, keep in mind that you will also have to enable the Remote Login privilege to be enabled on your machine under System Preferences -> Sharing.
For the sake of completeness, here is my modified .plist file:
Label org.tigris.Subversion ProgramArguments /usr/bin/svnserve --tunnel --root /usr/local/svn RunAtLoad ServiceDescription Subversion Server StandardErrorPath /dev/null UserName root
As with all these articles, please feel free to comment if you find and error or wish to add something that I've overlooked.



