MSDN Magazine: Team Foundation Server - Visual Studio TFS Branching and Merging Guidance:
We recommend minimizing the number of levels in a branching hierarchy. Adding an integration layer between Main and the Feature Team branches effectively doubles the merges required to move changes between the Main branch and the Feature branches. Branching helps isolate changes, but the cost of branching is the resulting effort needed to merge code between branches and to resolve merge conflicts that always seem to present themselves. Adding an integration layer doubles the merges and likely doubles the effort to resolve merge conflicts.

I don't know where to start.  This is painful.  Branches might double the number of merges (and it doesn't even do that -- merge into your "integration" branch a billion times, and merge into your Main branch nightly -- so that's only a factor of nights/billion more merges), but an integration branch does not double the effort of those merges.  With smart branching and merging, merges should be targeted, deliberate affairs.

The difference between TFS and git users seems to be a very serious cultural one.  I'm not down enough with TFS yet to know if it's also a technical one, but my first impression is that TFS and git should be functional equivalents.  The rigidity of TFS culture creates programming inefficiency.  TFS makes you behave like you have to go to the Roman Forum to talk to your neighbor.  Talk to your neighbor first, get on your own solid page, and then, in some metaphor-busting move, the you & your neighbor combine into one entity to present your ideas at the Forum.  Or maybe your whole neighborhood merges first.  Or maybe your whole neighborhood plus that really smart dude from Romania.

And if I hear TFS is better for large projects one more time, I'm going to go [figuratively] insane.  git was created specifically to develop the Linux kernal.  Sheesh.

Labels: ,