Tag-Branch-Layout

The Tag-Branch-Layout defines the project's root URL (within the repository) and where the trunk, tags and branches of the project are stored. It affects the presentation of and the working with URLs for various commands. When invoking a tag/branch-aware command on a directory for which no layout can be found, SmartSVN will prompt you to configure a corresponding layout in the Configure Tag-Branch-Layout dialog.

A Tag-Branch-Layout is always linked with a corresponding Project Root. A Project Root is simply the URL of the top-most directory of a project. Any directory can be defined as a project root as the definition of what a project is, is completely up to you.

The first decision for a Project Root is whether to enable or disable Tag-Branch-Layouts for it. Many SVN projects are organized using tags and branches. In this case choose Use following layout to configure the layout. If the corresponding project is not organized by tags and branches, choose Do not work with tags and branches for this project root to switch Tag-Branch-Layouts off.

Trunk specifies the root directory of the project's trunk. Branches and Tags specify the directory patterns of the branch and tag root directories, respectively. All paths are relative to the Project Root and when using values trunk, branches/* and tags/* here, you will be compatible with the suggested SVN standard layout.

Example

The Subversion project itself is located at http://svn.collab.net/repos/svn/. Hence for the corresponding SmartSVN project, Project Root must be set to http://svn.collab.net/repos/svn/. Subversion's Trunk URL is http://svn.collab.net/repos/svn/trunk, i.e. trunk is the relative path and must be set for Trunk. Branches are located in http://svn.collab.net/repos/svn/branches, e.g. http://svn.collab.net/repos/svn/branches/1.5.x is the root of the '1.5.x' branch. I.e. Branches must be set to branches/*. This is similar for Tags.

It's also possible to use multiple branch or tag patterns. In this case, when entering e.g. a branch, you have to specify not only the branch name, but the relative path to the common root of all branches.

Example

A project may also contain shelves which can be interpreted as 'personal branches'. For instance, the Project Root is located at svn://server/svn/proj. The 'normal' branches are located in svn://server/svn/proj/branches and the shelves are located in svn://server/svn/proj/shelves/[username], e.g. svn://server/svn/proj/shelves/bob/my-shelve. Hence, for Branches following patterns should be used: branches/*, shelves/*/*.

Now, when e.g. creating a branch 'b1' with Tag+Branch|Add Branch, you have to enter branches/b1, so SmartSVN knows that the branch should be created in the branches directory.

When e.g. switching to Bob's 'my-shelve' with Modify|Switch, you have to enter shelves/bob/my-shelve, so SmartSVN knows that it should switch to a branch within the shelves/bob directory.

SmartSVN uses the proposed standard layout for new projects. If you want configure another default layout, open one project which contains the wanted layout, select Tag+Branch|Configure Layout and use Make this configuration the default here.