As of about 30 minutes ago, my department at my day job is now completely off of CVS. We started our version control on CVS about a year ago, but over the course of the past month, we have fully transitioned to Subversion. Most of the switchovers were fairly easy, since only one project had an outstanding feature branch that needed to be carried over, but I brought over those changes yesterday thanks to the diff and patch functions.
It was actually quite easy. I did a cvs export of that branch at it’s tip and at it’s branch point, ran diff between the two to get what changes were made throughout it’s lifetime and saved that as a patchfile. I then went into the Subversion working copy, ran svn copy on trunk to create this new branch, and used the patch tool to apply the changes in that patchfile. I made sure all worked and committed. With that (and some work today on our last project that was still on CVS), we now are completely done with CVS.
I really could not be happier about this change. Subversion is a far superior system, and best of all, very command line friendly. With CVS, we all worked through a GUI (CrossVC was our GUI of choice), but with Subversion, we just run everything through command line.
My only gripe with Subversion (although CVS is no better) is the inability to commit chunks of files, rather than whole files. I’ve begun developing a workaround that I will post this weekend that involves a temporary checkout, running diff between the working copy and the pristine copy, modifying the patchfile to only contain the areas of interest, and applying the patch to the temporary checkout. You then commit with your note, remove the temporary checkout, update the real working copy, and you’re set. I’m having some issues with patch not liking the modified patchfile, but once I work that out, I’ll post a tutorial on how to do this.