We're running Universe here and have been using source code control along with a "build" system and a "patch" system since 2004.
The "build" system gets all items from source code control, including file sizing data to create files, Q-pointer items for the VOC file, binary PNG images, dictionary items, and programs, and builds the Universe account completely from scratch. This creates our installable product.
The "patch" system determines all source code items that have changed between releases and creates a patch file (similar to your DEPLOY idea). The patch file only contains the source items that have changed. The patch file is deployed to our FTP server (as part of the DevOps process) where it can be SRCDOWNLOAD'ed and SRCINSTALL'ed (part of our SRCTOOLS toolkit) on demand on any of our client's servers or developer accounts. Our SRCINSTALL can create files, load dictionaries, compile programs, deploy binary images and executables, delete old software, as well as detect version mismatches.
It's important to note that "building" a product and "patching" an existing system are two different things that use the same source code, but are really different and need two different approaches.
Developers have their own account where they develop and test their changes. They use our SRCDIFF to compare their account to the base product and generate a patch that can be applied back to the main trunk (you never want to manually keep track of what's changed). For programs, we also use the free version of DiffMerge (from SourceGear) to compare code.
rex