What you are asking for is unified change management, and that Subversion does not work very well (IMO). Change management will require some manual effort. But assuming you have decent problem tracking systems, here's what I worked for:
main branch (trunk) - new feature development here |- release-1.0 - locked release branch |
Once the bug has been fixed and fixed in the patch release, you will remove the old -issue # branch. This prevents the branches from getting out of control, but allows you to keep small changes in the settings.
Support devices can be enforced if the outlet trunks can only be accessed by integrators. Using subversion via apache: Subversion / Apache permissions , you can create a group of integrators and set the following permissions for your project
project |- branches (everyone: rw) |- individual-fixes |- release-branches: (integrator: rw, everyone: ro) |- release-1.0-fixes |- release-2.0-fixes |- trunk (integrator: rw, everyone: ro) <- new dev goes here!!!! |- tags (integrator: rw, everyone: ro) |- release-1.0 |- release-1.0-sp1 |- release-2.0
Then each merger is small, well monitored, and only a small group of people can merge. However, this creates a bottleneck in your merger team. I have never worked with a large git / mercurial command to see how this works.
You would also use something similar for feature fixes, but instead, instead of your outside line.
source share