title: What are the possible GIT repository structure designs for a project like mine?
body: <p>I am moving a project from SVN to GIT.<br />
  The project uses a set of SQL procedures. Multiple clients have their own versions of the files, but they also use a CORE set of procedures that is the same for all clients.</p>
  <p>Currently what we have on SVN is a one folder containing a CORE folder and multiple folders containing client specific procedures (<em>see &quot;current folder structure&quot; below</em>).</p>
  <p>My initial idea was to have one repository containing core files and separate branches that contain additional files per client, but then I realised that it can be quite dangerous and easily become messy if someone pushes files to the wrong branch.</p>
  <p>So, my another idea was to have each client's procedures in their own repository and linking the CORE repository as a sub-module in each of them.</p>
  <hr />
  <p><strong>Questions:</strong></p>
  <ol>
  <li>What are the possible repository structure designs (workflows?) I can use for this scenario?</li>
  <li>What are their advantages and disadvantages over the others?</li>
  </ol>
  <hr />
  <p>Here is some additional info that can make my current situation easier to understand:</p>
  <p><strong>Rules:</strong></p>
  <ul>
  <li>CORE is always the same for every client</li>
  <li>Client folders contain their own additional/bespoke files/procedures</li>
  <li>Only my team is making changes to the repository (i.e. clients do no have access to the code)</li>
  <li>It can be usefull to easily pull changes from one clinet to another, but it is <em><strong>not</strong></em> a stric requirement.</li>
  </ul>
  <p><strong>Current deployment process at clients site:</strong></p>
  <ol>
  <li>Clone an SVN repository containing all CORE files + ALL files for clients (<em>see folder structure below</em>)</li>
  <li>&quot;Install&quot; all the core procedures</li>
  <li>&quot;Install&quot; all the client's bespoke procedures</li>
  </ol>
  <p><strong>Current folder structure for the project:</strong></p>
  <pre><code>├── core
  │   ├── proc-core-bar.sql
  │   ├── proc-core-csv.sql
  │   ├── proc-core-db.sql
  │   └── proc-core-foo.sql
  ├── client-1
  │   ├── proc-client-addr.sql
  │   ├── proc-client-msgs.sql
  │   └── proc-client-ordr.sql
  ├── client-2
  │   ├── proc-client-addr-additional.sql
  │   ├── proc-client-addr.sql
  │   ├── proc-client-msgs.sql
  │   └── proc-client-ordr.sql
  ├── client-3
  │   ├── proc-client-addr-additional.sql
  │   ├── proc-client-addr.sql
  │   ├── proc-client-msgs.sql
  │   └── proc-client-ordr.sql
  ├── client-4
  │   ├── proc-client-addr.sql
  │   ├── proc-client-msgs.sql
  │   ├── proc-client-ordr-additional.sql
  │   └── proc-client-ordr.sql
  └── client-5
      ├── proc-client-addr.sql
      ├── proc-client-msgs.sql
      └── proc-client-ordr.sql 
  </code></pre>