Rafael Schloming wrote:
Aidan Skinner wrote:
Qpid Nation,
previously I don't think we've managed source, and particularly branch
management, very well. We've ended up with a proliferation of
branches, no
clear documention of what should go where, how it gets between
branches and
when a branch dies, which has lead to a few... unpleasent... merges.
In a going forward, proactive, open and transparent manner I suggest
that we
never close trunk for commits of any sort, it's always open for tasty
new
feature awesomeness.
When we're ready to start bug fixing / stabalising for release, we
branch an
M{N}.x and use that as a testing target. Fixes would occur on trunk
and be
merged down.
Once that's in a decent state, we branch an M{N}.{O} where critical
fixes
from M{N}.x get merged to (once they've been comitted to trunk) and
that's
what we tag for relase.
For M{N}.{O+1} we take another branch from M{N}.x a bit further along
once
further fixes from trunk have been merged down.
A diagram may be helpful, * represents a commit, | a merge or branch
hack awesome fix shiny critfix bugfix feature
trunk ----*------
*-------*-------*-------*---------*---------*----------->
| | | |
M3.x----*-------------------------------*-------------------*------------------------------------------->
| |
M3.0-----------*--------------------------------------------------------------->
Obviously if trunk is majorly divergent from the branch then it won't be
quite as simple as that, but that's theory and i think it should be
pretty
workable.
Ok, sorry to chime in late, but here are my thoughts...
I think in general branching tends to get messy more quickly and
easily than people expect, and this is true even if you're someone
like me who always expects branches to be messy.
Given this I tend to favor a release model that avoids branching
unless absolutely necessary. Something along the lines of every n
months we do a release by stabilizing trunk to the point where it
meets our release criteria, and then make a release branch at that
particular snapshot of trunk.
I would also say that when bugs are reported against a particular
release, we should as a general rule fix them on trunk and encourage
users to upgrade to the next release. I would say only on a case by
case basis should we backport specific fixes to any release branch. I
think this policy avoids unnecessary branching/merging, and also
ensures that release branches are kept stable unless there is good
reason to disturb them.
This model does close down trunk for radical new feature development
when a release occurs, but I would hope that the need to do radical
new feature development during a release is an exception, not the
rule, and in that case I think it's reasonable for the feature
development to be done on a branch. Certainly if no such feature
development is happening it would be nice to avoid the additional
merge overhead of branching *before* stabilizing.
--Rafael
+1 for stabilizing on the trunk instead of always needing to merge
stabilization changes.
-Ted