I've experimented a little with version control over the years (cvs, svn) but never used it in anger even though I know I should.
The thing that's always stopped me is that I've never found one that I've liked for web development.
What I have is a server in my office that everything gets developed on. When I am happy, I use unison to synchronise the changes to the live site. What this gives me, is no ability to roll back changes if something goes wrong.
What I want is for the version on the live site to just be a checked out version from a version control system, with the changes on the dev server being checked in to the version control as we develop. However, to me the logical location for the version control system is therefore my dev server in the office (which has plenty of disk space), but I don't want to open up ports to allow live servers to "pull" a version from the system. I want to be able to "push" a version to the server from the dev server, and that's where I get stuck.
The best solution I've ever come up with is to check out a separate local copy which I then unison to the live site, but this is two steps instead of one and (more importantly) means duplicating the site locally for no real benefit - which is a pain if a site has several hundred MB of images, for example.
The other part that I've never found a good solution for is handling databases; ideally there should be a way to perform diffs against different MySQL database schemas and apply them but I'm not aware of a way to do this either.
On the other hand, what I want to do seems like a fairly "standard" thing so I'm sure either there must be a way or that other people in similar situations have found a better way to do it than I am suggesting?