We are upgrading our source control (most likely to **Vault**) at work and are moving to the branch methodology, and are having some problems with working out the folder structure to use.

We intend to use the Trunk as the development line, and a branch will be a release and bug fixes to that release.

We have come up with two folder structures, and I wanted to know what the advantages and disadvantages of each were:

```
Projects
  |-> Trunk
    |-> Data Access
    |-> Business
    |-> Desktop
    |-> Website
  |-> Branches
    |-> Branch 01
      |-> Data Access
      |-> Business
      |-> Desktop
      |-> Website

```

and

```
Projects
  |-> Data Access
    |-> Trunk
    |-> Branches
      |-> Branch 01
  |-> Business
    |-> Trunk
    |-> Branches
      |-> Branch 01
  |-> Desktop
    |-> Trunk
    |-> Branches
      |-> Branch 01
  |-> Website
    |-> Trunk
    |-> Branches
      |-> Branch 01

```

If we use a source control block on the build machine (**cruisecontrol.net**) with the first solution we can say:

```
<path>$\Projects\trunk\</path>

```

To build a branch would be fairly similar, but is it possible to pick up the newest branch in the `branches` folder? otherwise we would have to edit the ccnet config for every release.

If the second methodology were to be used (a lot of people suggest this method) how would the build machine pick up all the relevent projects? somthing like this maybe:

```
<path>$\Projects\*\trunk\</path>

```

if some projects have been branched but others have not, how can i make it get the trunk when no branch exists (if this is possible).

would getting all the trunks, followed by overwriting with the branches work? would it just error if it tried to access a non-existant branch?