4 ms·
I can't speak for the grandparent, but we use a similar system here and also on SVN. We have a 'core' team and a number of 'project' teams. Every team works in
by Goosey 16y ago
I can't speak for the grandparent, but we use a similar system here and also on SVN.
We have a 'core' team and a number of 'project' teams. Every team works in it's own branch, which is branched off of the trunk. The trunk is kept in a stable state.
No one really uses 'feature branches', which I find to be a shame (but hey, it is SVN so feature branches are not convenient). Rather the core team creates a new branch each sprint (scrum here - 3 week sprints) and at the end of each sprint merges it back into trunk, after it has been verified as stable by QA.
Project teams can either branch from trunk and stay off in la-la land until the end of time, or they can try to keep up to date. The way they keep up to date is by merging back into trunk and then starting a new branch. This process is hand-held by the core team and goes through the same QA process to verify it is stable.
How does this work out? Well merging is a major event. Aside from the stability verification work that goes into it a core team member (usually the lead) will generally spend about a day on a merge/branch cycle.
So it feels slow and big, but we do maintain a very stable trunk.
SVN merge issues are a pain, but so long as we never do double-merges (that is, merging a branch into trunk, continuing work on the branch, then merging it a 2nd time into trunk) we seem to avoid the most common gotcha.
This system would be improved if a DVCS was used instead. The issues to adoption of that are both user and technical. We have a wide range of users of widely varying technical skill levels so the ecosystem of SVN clients is going to be difficult to usurp. We also store a LOT of very large binary data in the repository and would find it very inconvenient to separate it out (code version and asset version matching is essential), and in my tests of using git-svn (for example) it simply choked. Like an exception thrown from the bowls of the client type of choke.