Mercurial & Web Development: How to handle publishing/deployment?
===

At work we're moving from no SCM to Mercurial. It's a bit of a learning curve, but after messing with it for two days I definitely feel more comfortable with it.

I still have one big, unresolved question though in my mind: Once code is finished, how do we handle the actual deployment?

Should we be running a copy of Mercurial on the production (live) server? Or should we set rsync or something up to sync from the repo to the web directory? What's the best practice here?

If we do go w/ just pointing apache to the repo, I assume this is okay as long as we're careful not to `hg update` to a different, non-stable branch? That still seems a little dangerous to me though. Is there some way to force it to only switch to certain builds?

Or is pointing apache to the repo just a terrible idea and I should be doing something else instead?

On a related topic, I've also heard some talk about putting any upgrade scripts (such as schema changes for MySQL) under version control so they can be ran when the version is deployed. But how would that even work as part of the workflow? I wouldn't want to keep it w/ everything else, because it's a temporary one-time use script...

Thanks for any advice you guys can give.