First, my (simplified) problem in a nutshell:
My release cycle at work is, each release we currently perform a full copy/deploy of the web application. Simply put, we generate a tarball, SCP it to the production server, and install it. Simple as that. The technology stack is LAMP, so there is no code compilation steps at this time.
The problem is, this tarball is getting large, and we need to deploy this tarball to many servers. While, this is a very reliable process, the overhead and time to perform this deploy adds up.
What I want to do is perform delta/patch releases for this LAMP web application that does not require the full tarball deploy.
I am using SVN for my VCS, and I do not want my deployed applications to be SVN working copies. I have experimented with using patch (linux CLI tool) and patch files, but this has holes in the process. For instance, patching the same file more than once, there is dev/ops overhead to track which file(s) were patched, from what versions to what versions, on the production site (which quickly gets complicated when multiple sequential patches are performed).
Ultimately, I need a reliable method to do a delta/patch release for a LAMP web application, that does not require a SVN working copy on the production webserver.
How do others solve this problem? Do you simply use rsync with a delete option, and avoid patch files?