- Use the standard
trunk/
,branches/
,tags/
structure - Use
trunk/
as your mainline - Create branches for development and release in
branches/
- you can distinguish them using a naming convention or even replacebranches/
withdevelopment/
andrelease/
- Use
svn merge
to perform both merges and copies - read Advanced Merging first
Yes, you can do that in Subversion, it is more or less standard practice.
The idea is to merge from the more stable with less change to the less stable, in order to minimize unrelated changes that would make merging more difficult.
Merging back to the mainline is done by first merging all changes from the mainline into the branch, and then copying the branch, that is replacing the mainline by the merged branch.
Reading more on the subject I found what I believe is a precise description of what is needed in order to do this kind of change propagation between branches in svn.
It is descriped in the book Version Control With Subversion by C. Michael Pilato et al. in the subchapter Basic Merging - Keeping a Branch in Sync
The follwing is cited from the book.
Subversion is aware of the history of your branch and knows when it divided away from the trunk. To replicate the latest, greatest trunk changes to your branch, first make sure your working copy of the branch is “clean”—that it has no local modifications reported by svn status. Then simply run:
$ svn merge http://svn.example.com/repos/calc/trunk
Once you have a clean working copy of the trunk, you're ready to merge your branch back into it:
$ pwd
/home/user/calc-trunk
$ svn update # (make sure the working copy is up to date)
$ svn merge --reintegrate http://svn.example.com/repos/calc/branches/my-calc-branch
$ svn commit -m "Merge my-calc-branch back into trunk!"
Please read the whole chapter (and maybe even the book) before starting on this. It is recommended reading.