The company I work for is starting to have issues with their current branching model and I was wondering what different kinds of branching strategies the community has been exposed to?
Are there any good ones for different situations? What does your company use? What are the advantages and disadvantages of them??
For Subversion, I agree with Ryan Duffield's comment. The chapter he refers to provides a good analyses on which system to use.
The reason I asked is that Perforce provides a completely different way to create branches from SVN or CVS. Plus, there are all the DVCSs that give it's own philosophy on branching. Your branching strategy would be dictated by which tool(s) you're using.
FYI, Svnmerge.py is a tool to assist with merging branches in SVN. It works very well as long as you use it frequently ( every 10-30 ) commits, otherwise the tool can get confused.
I'd highly encourage reading Eric Sink's opinion on the matter:
Chapter 7: Branches
I, like Eric, prefer the "folder" style branching that he talks about.
No matter which branching pattern chosen, you should try to keep your branches in a binary tree form like this:
Take a look at this http://codicesoftware.blogspot.com/2010/03/branching-strategies.html for a better explanation
This would depend on which Version Control System you're using. Each VCS has different approaches to branching.
Which VSC do you use?
Gnat has written this excellent break down on the various bits of advice your can find on branching strategies.
There's not one branching strategy, it's what works for:
Jeff Atwood's post breaks down a lot of possibilities. Another to add is the concept of promotion (from Ryan Duffield's link). In this setup you have a dev branch, test bracnh and release branch. You promote your code up until it reaches the release branch and is deployed.