Mark Rogers wrote:
However, to me the logical location for the version control system is therefore my dev server in the office (which has plenty of disk space), but I don't want to open up ports to allow live servers to "pull" a version from the system. I want to be able to "push" a version to the server from the dev server, and that's where I get stuck.
I suggest using Mercurial or Git rather than a cvs/svn which are limited to a centralised model. Then you can have a repository on your dev machine, and clone it to your production machines. Check in changes on your dev machine, push them to the remote repository, then do whatever your chosen vcs needs to update your working copy there (which you can probable automate), and do whatever your server needs to deploy/restart (if anything).
This has the advantage that if your dev machine dies, you can make changes (or roll back) on your production server, and later pull them back to your dev machine.
A good place to start with Mercurial is: http://hgbook.red-bean.com/read/a-tour-of-mercurial-the-basics.html The short version for your usecase is:
dev$ hg init siteX dev$ cd siteX dev$ # copy your files to this directory dev$ hg add dev$ hg commit -m 'Initial commit' dev$ hg clone . ssh://user@prod/siteX
prod$ cd siteX prod$ hg update
dev$ # make changes dev$ hg commit -m 'cool new stuff' dev$ hg push ssh://user@prod/siteX
prod$ hg update
You can configure mercurial so you don't have to type the remote url to push, see http://mercurial.selenic.com/wiki/TipsAndTricks 2 You can automate that "hg update" on the remote server, see http://mercurial.selenic.com/wiki/FAQ 4.19
So then you just commit and push.
-- Martijn