title: Team Foundation Server branching characteristics, compared to others
body: <p>What are the branching characteristics of TFS?  </p>
  
  <hr>
  
  <h2>Early Branching/Heavy Branching</h2>
  
  <p>If we look at the tools Perforce, Subversion, CVS, for instance, we see that branching is taking a copy of the trunk.  It is "early branching" all of the files which are defined to be branched, irrespective of whether those files are changed in that branch.</p>
  
  <p>This methodology starts creating new versions of files, at the time the decision to create a branch is made, for the entire tree of files.  </p>
  
  <p>One of the biggest disadvantages is that any changes made outside that branch (typically in the trunk), that you want to bring into the branch, require per-file merges inwards of these files as they have "early branched."</p>
  
  <h2>Late Branching/Cheap Branching</h2>
  
  <p>In comparison with more recent tools - for example - ClearCase, Plastic SCM, AccuRev, Mercurial, Git - we see a late (cheap) branching policy.</p>
  
  <p>We see that first new versions in a branch are only created when a file is checked in on a branch.</p>
  
  <p>This means that when changes happen on the trunk that you wish to rebase into your branch, no merges for unchanged files occur.</p>
  
  <p>How does TFS behave?</p>
  
  <hr>
  
  <p>caveats: I note my terminology is not exact when we consider DVCS tools. I recognise Perforce has a round-about way of overlaying views but it's not done without great labour.</p>