Pretty much what I have been pushing at, although for non-web systems the developer’s workstation may be good enough as a test environment not to need a complete statging environment (and yes, databases are a pain with this kind of infrastructure).

A key advantage of automating the push from VCS to server is that the server always has something that exists in VCS, not some messy mixture of versions and a few not-checked-in files you loose at a critical moment. The next step is to use the server’s package manager to deliver the files onto the server, so it’s a one-command operation to deploy there (if your package is smart enough). This matters more if your eventual depolyment is to multiple servers of course.

This is also where a centralised VCS does have advantages – anything comitted has to go through there, and so is captured. With a distributed set-up, there is the risk that someone figures out how to push from their workstation straight to production, then both sets of data go AWOL ….