title: Git Subtrees vs Monorepo
body: <p>We recently decided to move from TFVC to Git and I'm trying to find the best way to design our new Git architecture.</p>
  
  <p>Our code is made of independent but <strong>tightly coupled</strong> modules, let's look at the following projects:</p>
  
  <ul>
  <li><p><code>CommonLib1</code></p></li>
  <li><p><code>CommonLib2</code></p></li>
  <li><p><code>ApplicationA</code> (uses <code>CommonLib1</code>)</p></li>
  <li><p><code>ApplicationB</code> (uses <code>CommonLib1</code> &amp; <code>CommonLib2</code>)</p></li>
  </ul>
  
  <p>Although <code>CommonLib1</code>/<code>CommonLib2</code> are completely independent, almost every new feature for <code>ApplicationA</code>/<code>ApplicationB</code> would require modifying <code>CommonLib1</code>/<code>CommonLib2</code>.</p>
  
  <p>Moreover, when adding new features we would like to create a single branch that would span between all our projects.</p>
  
  <p>As far as I understand, I'm left with 2 main options:</p>
  
  <ol>
  <li><p>Create a repo for each project, and add <code>CommonLib1</code>/<code>CommonLib2</code> as subtrees in <code>ApplicationA</code>/<code>ApplicationB</code>.</p></li>
  <li><p>Create a single Monorepo for all the projects.</p></li>
  </ol>
  
  <p>What would be the best Git practice for my situation?</p>