This is what my SVN structure looks like, for my java based product:
\branches
\clientA
\trunk
\tags
Client A specific product customization is being done in clientA branch. Once the customization for release is finished, the branch will be tagged and released. Now, I am not going to merge these changes to Trunk because these are client specific changes.
Let’s say, I’ve made a release MyProduct-ClientA-REL-v1.0.
Client A requests more features / enhancements. So, I continue to develop in the same branch, getting ready for the next release (MyProduct-ClientA-REL-v1.1). While developing for this release, Client A comes back and says that he has encountered a bug with the previous release.
What do I do now? Say, I have modified too many things in the same branch of the v1.0 code (deleted files).
Does the question make sense?
What I would do.
Export the clientA tag at the time of the release (if you didn’t make it a tag, you will have to do some research to find which revision it is equivalent to). Also, if you didn’t make a tag before, after finding the revision is a good moment to do it.
With that, create an additional branch for that release bugs. Make your fix and commit into the given branch. Get a diff with the release version and fix it in your client main branch.
For other customizations, maybe it would be a good idea to create a branch ‘ClientX’ and, there, recreate the trunk/branchs/tags structure.