I recommend creating a release branch every time you start making release candidates. Trunk remains alive to work on things that don't go on release (the .next version, as we say). A release release is reserved only for bug fixes and material that should be included in the release. It is good practice to always transfer them to the trunk first and then the cherry pick to merge them into the release branch. Always try to merge from the trunk into other branches, because it simplifies the task. Reintegration of the "function branches" into the trunk is fine, but fixing the error in the release branches and then merging it back into the tube should be avoided.
After the release is in the wild, the release branch is maintained to fix additional bugs and ultimately makes small releases. You still need to fix bugs in the trunk (don't send them to the .next release) and combine them with every release branch that you still actively support.
The good news is that you can start this methodology after the fact. Go back to the revision of the torso from which your current version was created, and create a release branch. TortoiseSVN has a convenient menu for creating tags and branches from specific changes when you right-click on a revision in the log viewer.
Once you have a release branch, you need to check it out and start merging with the bug fixes that you want to publish. All your new work in the trunk stays where it is. If the connecting line and release branch diverge significantly, you may just need to make corrections directly on the release branch, but try making them in the connecting line and merge them into the release branch when you can.
One more thing. Each time you submit a release from the release branch, you must make a copy of the tags with the version version label. This can be useful later to find out what has changed between versions or rebuild the old release if you need to. We get to the full assembly from the tag when sending the release, because we insert the SVN version number into our version of the product, so that if the client reports an error, we know exactly what code they are executing (since the versions of SVN are unique through the repository).
Hope this helps, and good luck.
Chrish
source share