On Mon, Mar 21, 2011 at 6:16 AM, Ryan Schmidt <subversion-20...@ryandesign.com> wrote: > On Mar 18, 2011, at 14:33, Greg Lindstrom wrote: > >> Traditionally, we set up a "trunk", "branches" and "tags" directory in >> Subversion for each project. I have a good feel for creating branches, >> making changes, merging back to the trunk and creating a tag. What I would >> like advice on is how to migrate to production. Currently, after I make a >> tag I will check it out to a "distros" directory (named the same as the tag) >> and then change a pointer from the "old" distro to the new one. This way we >> have a history of distros and it's easy to revert back if an error is found. >> The problem I have with this setup is that is what Subversion is designed >> to do for me (keep track of changes). >> >> An option I have been considering is to create another directory under the >> project called "prod" that we check out to our production environments. Any >> production tags would be merged into this branch and then we would "update" >> the production environment with the new code. This would, I believe, give a >> nice change history in the svn log.
It might be much simpler to set up a "deploy" directory with "svn:extern" set to point to your production tag. This allows you to do an "update" of that working copy as part of any procedure you wish, even "post-commit", and deploy that. Just make sure that the svn:extern is stable and points to well defined targets. It doesn't even have to live in the same Subversion repository this way. >> Another option is to create a "zip" file once a distribution tag is created. >> The zip file would be placed out on the network for people to install as >> needed. I don't care for this idea, but I know a large company that does it >> and it seems to work. E-e-e-e-e-w-w-w-w-w-w-w. >> What advice can you give me? Is there a better way? What do I Google to >> find out more? Where do I go for help? We've done a fairly good job on a >> small scale, but we're growing and I want to get something THAT WORKS in >> place. > > Consider using SVN::Notify::Mirror, a perl module explained by its author > here: > > http://svn.haxx.se/users/archive-2006-02/1148.shtml > > The theory of operation is that, whenever you want to deploy something to > production, you simply create a tag following a certain naming scheme (that > you can define). A post-commit hook in the repository runs > SVN::Notify::Mirror which notices when new production tags are created and > mirrors their contents to your production server. Which involves creating unnecessary perl modules. A simple svn:extern allows tracking of the production release itself.