After working a bit on websites where we use SVN as a version control system, I've been thinking that it is actually rather difficult to use it effectively, especially when you're programming in Windows.
Take this example. You have a group of programmers, a web server, and an SVN repository (which may or may not be on the web server). The programmers program away, doing their thing, occasionally updating and committing their changes as they go along. They upload their changes on occasion to see if what they want to do works.
There is a major problem with this approach. Suppose one person uploads a change, sees it doesn't work exactly as planned, makes a tweak to another file, uploads that one and sees things now work. But before committing, somebody else working on one of those files modifies it and uploads it. Now the main site might not work, mainly because people are overwriting each other's changes. This is incredibly annoying! I'm speaking from experience here. On a small team it isn't so bad because people probably aren't working on the same files, but as your team gets bigger it becomes more and more likely that something like this will occur.
This is the wrong way to code. It leads to bugs everywhere that will continue to re-appear. Sometimes, if the programmer hasn't realized that somebody has overwritten their changes and begins wondering why their code doesn't work anymore, they spend time trying to track down the bug. This is a waste of programmer effort that could easily be avoided. Here's how:
Everyone needs their own development space. With their own database information, memcached, etc. Completely independent from one another. This is way easier to do with Linux, because you can just install Apache/MySQL/etc. on your local machine and do everything you want there. With Windows you can do this, but it is a fair bit clunkier I find. Under Ubuntu you just go "sudo apt-get install apache2 mysql-server ..." and you're set.
First, you update and commit. That way, you have the most up-to-date version of the repository. Then make your changes. Make sure they work. Then update, resolve any conflicts that may appear. Make sure your code still works. Then commit. Then put it on the server somehow, either by using the SVN repository on the server and doing an update, or something. Don't upload your changes to the server while you are working on them!
Even better would be to do this with unit tests, that way before you commit you can run the unit tests to see if your code still works.
If you want to save your changes to the repository, but don't want to merge it with the main version, you can always branch. That's what branching is for.
I do find some things with SVN to be annoying. Branching is a bit annoying to do. Having to set up repositories is annoying, especially if you don't have write-access to the SVN server. You need to request a server admin create you a repository and set it all up.
I've been looking into using git for my projects instead of SVN. It seems to be much easier to use, and lots of geeks are getting excited about it. This usually means that it is awesome, and I should be checking it out to see if it is indeed awesome.