On Tuesday, August 14, 2012, Greg Reddin wrote: > On Mon, Aug 13, 2012 at 10:29 PM, Omar Gonzalez > <omarg.develo...@gmail.com <javascript:;>> wrote: > > The way I see it, if there are a bunch of developers working in trunk, > and > > they happen to leave things unfinished or unstable, then somebody has to > go > > through all of that and figure out what is actually ready for a release > and > > what is not. Without a well defined SVN strategy this is going to be a > mess > > that someone will have to clean up. > > Everyone is working in trunk. Some things are unstable. A discussion > starts up on list that it's about time we cut a release. We either > decide to: 1) move some stuff from trunk to a branch so we can make a > release from trunk, or 2) cut a branch from trunk and make a release > from the branch. Either way we spend some time either getting trunk > stable for a release or getting a branch stable for a release. Then we > make a release and work goes on. > > Personally, I wouldn't commit any unstable code to trunk. If I'm > working on something that's going to span more than one or two > commits, I'd do it in a feature branch. When the feature branch is > done I merge to trunk. > > Here's a use case: Greg wants to implement better Maven support and > Alex wants to refactor UIComponent at the same time. Both of these are > long-running efforts that touch a lot of code. Nobody knows how big > either one really is or how long it will take. So here's a script of > how it might play out: > > 1. Greg: svn cp trunk branches/maven-support > 2. Alex: svn cp trunk branches/UIComponent-refactor. > 3. Over the course of two or three weeks people commit to both of > these branches. People also commit to trunk. > 4. Periodically Greg and Alex run svn merge trunk in their branches to > keep the branches up to date with trunk. > 5. Om decides to make a release from trunk, so all effort in trunk > goes toward making the release. Work continues in the two branches. > 6. Release is cut from trunk and a tag is created. > 7. Greg and Alex continue to run svn merge trunk to keep their > branches up to date. > 8. Alex completes his work first because he's much faster than Greg :-) > 9. After some discussion on flex-dev everybody agrees Alex's work is > worth integrating. > 10. Alex does a final svn merge trunk in his branch to get the latest > updates. > 11. Alex goes to trunk and runs svn merge --reintegrate > branches/UIComponent-refactor, > 12. Alex makes a commit to trunk. > 13. Greg does another svn merge trunk in his branch to get the > UIComponent refactor. > 14. Alex makes a release from trunk. > 15. Greg repeats step 13. > 16. Eventually Greg & team *finally* finish their work. > 17. After discussion on flex-dev everybody agrees that Greg's work is > indispensable and needs to be integrated. > 18. Greg does a final svn merge trunk in the maven branch to bring > over latest changes. > 19. Greg does a svn merge --reintegrate branches/maven-support in trunk. > 20. Greg makes a commit to trunk. > 21. Greg makes a release from trunk. > ... > > Notice a few things: > * Potential pain points come in step 7 because the released code might > be hard to integrate into the branches, and particularly steps 9 - 12 > and 16 - 20 because we're reintegrating significant changes back into > the codebase. However these pain points are at isolated, atomic stages > along the way. > * Notice the discussion that takes place at step 5, step 9, and step > 12. When we are ready to make a release we talk about it. Everybody > works together to make it happen. When we are ready to integrate > significant progress we talk about it and everybody works together to > make it happen. > > It's not perfect. It's not necessarily fast. But it's proven to work > for a lot of apache projects and it doesn't get much simpler. > > Greg >
It sounds like hell to me. -omar