Not free, but a very nice (!) system is "PlasticSCM": http://www.plasticscm.com/demos/plastic28/index.html
Works with branches, which works very good for parallel development ("branch per task pattern"). For every task (ticket, bug, issue, whatever) you make a child branch. Plastic will update your "workspace" on disk, so all files have the right version. You can make as much changes and checkins as you want, because you work in your own branch, so nobody else get troubles if you checkin something that does not compile! This works LOVELY!
If you switch to another branch (because you must make a quick bugfix), all changes are "shelved" on the server, current workspace is automatically updated to that other branch, you can make some changes + checkin, switch back to your branch you were working on, and all files are unshelved again, so you can continue where you were before. Very very nice.
It has a very cool GUI client, works also on MacOS + Linux.