I have a remote SVN repository on a totally separate server. On my local machine I have a checkout of the repository, and the same on the production server. Updating files and adding new functionality is as simple as me working locally, committing, then firing off a command on the production server to update all the edited files (I could even cron-job this if I wanted to, but it’s better to be in control in case you commit something borked by accident). This means all my edits are versioned, so I can roll back if I break something. It also means that setting up another machine to work locally from (e.g. my laptop, or a new team member) is as simple as checking out the repository to that machine and starting work.