views:

30

answers:

2

What is the best branching and merging strategy for a small development team making a lot of concurrent development on the same project?

We need to be able to easily apply a hotfix to a production release while other developers are working.

I was looking at the TFS Branching Guidance guide from codeplex and can't seem to figure out what is the best option for us.

Thanks

+2  A: 

Without knowing your organization or how your team develops, it is hard (maybe impossible) to make a recommendation.

In our organization, the majority of our development is organized around releases, so we did a "branch on release" approach. That works great for us. We also do bug fixes, so we've implemented a "branch on feature" approach off of the production line for bug-fixes.

If you have different people all working on different features that might make it to production at different times, a "branch on feature" approach might work.

If you are all working on the same development line, a single "development" branch might work for you.

It took us months to finalize our branching strategy (for 14+ team projects, around 80 developers, and multiple applications). I don't expect that it will take quite as long for a smaller organization, but definitely spend some quality time thinking about this, and consider bringing in some outside expertise to give you guidance.

Robaticus
A: 

In addtion to Robaticus, you need to figure out why you want to do the parallel development.

In my opinion it is all about what you want to isolate

  • If you do parallel development because there are multiple features that are developed, it depends whether the features need to be released in the same package (version / release / give it a name) and whether you want the different features to don't integrate with each other during development. The latter is important when the different features interfere with each other and you only want to spend time on the integration when you merge both features. If you need isolation on any of these reasons, you have within one release multiple branches which you merge before you do the integration test.

  • If you do parallel development because you want to support multiple releases, then you need to know how many releases you need to support (how many release that are rolled out in production do you need to support, how many release do you have in pre-production, etc.). In this case, the advise is to have a branch per release that you need to support It sounds that you need to have this branching strategy for your organization.

It also depends on the type of files that you are branching. If you have SSIS or SSRS files (or any other XML-based files), binary files, or any files that are not easy text (in contrast to C#), then it is not easy to merge the files from two different branches. You then need to have some manual involvement to actually merge these files!

So as Robaticus already said, we need more information on your specific scenario to give more detailed guidance.

Ewald Hofman