title: TFS 2010 Branch Across Team Projects - Best Practices
body: <p>I'm having issues understanding how to configure TFS according to best practices as provided by the TFS Ranger team. The issue is such:</p>
  
  <p>My company has several products which make use of a shared common code base.</p>
  
  <pre><code>&gt; $/Core
  &gt;  -&gt; /Main/Source (Parent Branch)
  &gt; 
  &gt; $/Product1
  &gt;  -&gt; /Main/Source
  &gt;  -&gt; /Main/Source/Core/Source (Child Branch from $/Core)
  &gt;  -&gt; /Main/Source/...
  &gt; 
  &gt; $/Product2
  &gt;  -&gt; /Main/Source
  &gt;  -&gt; /Main/Source/Core/Source (Child Branch from $/Core)
  &gt;  -&gt; /Main/Source/...
  </code></pre>
  
  <p>Therefore we have one team collection and say, three team projects for this example. ($/* is a team project)</p>
  
  <p>Our initial release branching is a bit of a pain. Instead of branching on the /Main to /Releases, or /Main to /Development, we have been branching each project individually. <em>(Not team project ... solution project.)</em></p>
  
  <p>This is due to the inability to have nested branch roots. (See TFS Errors: <a href="http://www.google.com/search?q=TF203028%20TF203071" rel="noreferrer">TF203028 and TF203071</a>)</p>
  
  <p>According to TFS Ranger Guide and our revised approach to branching releases, hotfixes, developments, we should branch from /Main rather than /Main/Source/Proj1,/Proj2,/Proj3, etc. It's just become a rather large annoyance.</p>
  
  <p>Ideally we would like:</p>
  
  <pre><code>&gt; $/Product1
  &gt; -&gt; /Main/ (Branch - Parent)
  &gt; -&gt; /Releases
  &gt;    -&gt; /1.x
  &gt;       /1 Service Pack (Child Branch from $/Product1/Main
  &gt;       -&gt; /1.0
  &gt;          -&gt; /1.0 Hotfix (Child Branch from $/Product1/Releases/1.x/1 Service Pack)
  &gt;          -&gt; /1.0 RTM (Child Branch from $/Product1/Releases/1.x/1.0/1.0 Hotfix - Read Only)
  &gt;          -&gt; /1.0.22 RTM (Child Branch from $/Product1/Releases/1.x/1.0/1.0 Hotfix - Read Only)
  &gt;       -&gt; /1.5
  &gt;          -&gt; /1.5 Hotfix (Child Branch from $/Product1/Releases/1.x/1 Service Pack)
  &gt;          -&gt; /1.5 RTM (Child Branch from $/Product1/Releases/1.x/1.5/1.5 Hotfix - Read Only)
  </code></pre>
  
  <p>Solutions:
  1. We can convert each shared branch (ie. $/Core) back to regular folders. This way no folder under /Main is a branch root.  We can then perform a baseless merge from $/Product1/Main/Source/Core/Source back to the parent $/Core/Source.</p>
  
  <p>Has anyone any experience with baseless merges. What I've read from Microsoft is that they are exceptions which should not be commonplace. MS states that if you set up your projects properly with TFS, you would never need to perform a baseless merge.</p>
  
  <p>How is this possible when branching across team projects?!? It should be commonplace in any software development house to have shared libraries amongst products.</p>
  
  <p>I'm open to other solutions too.</p>
  
  <p>Thanks!</p>