Hi, at the moment we use Subversion for source control, but all of the merging work for our releases is done manually. We release several times a year, so create a branch for each release. All work from earlier branches must make it into later ones. Work on later branches must not make it into earlier ones (this is in our contracts). I believe this is known as the Promotional Model.
I think the following diagram best illustrates our desired workflow, with branches being created whenever work starts on a new release, and changes flowing from earlier branches to later ones.
| 1 | |\ | \ | 2 3 | |\| 4 | | |\ 5 | \ | 6 | | | 7 |\|\| | |\| 8 9 |\ | | | \ |\| | 10 x |\| | | |\| | | | a b c d
- Would this model work smoothly using Subversion despite the lack of a meaningful trunk?
- Would automated merge tracking work for the updates from earlier branches to later ones?
- Would it be ok to close/delete/ignore a branch (in this example release branch 'a') without reintegrating?
- Would it be ok to create feature branches off of each release branch, and would merge tracking work for these? (They would follow the recommended create/merge/reintegrate model.)
Edit - add more info.
The reason that the traditional Unstable Trunk model might not be suitable is illustrated by the following diagram. Features for each release are not necessarily completed in order of release (some customers can be slow to confirm requirements). We want to propagate changes from earlier branches to later ones as soon as possible.
a | 1 | b|\ a | \ | 2 3 | | | 4 | b/|c | / 5 | | | 6 7 | | b c a
In this case, we want feature 2 (completed in branch a) in branch b, but as this is a child-to-parent merge, and therefore not supported by Subversion, it will have to be done manually. Similarly, feature 6 would have to be manually merged twice. I anticipate this to be a relatively slow and error-prone process compared to automatically tracked merges.