Once your repository is created and configured, all that
remains is to begin using it. If you have a collection of
existing data that is ready to be placed under version control,
you will more than likely want to use the
svn
client program's import
subcommand to
accomplish that. Before doing this, though, you should
carefully consider your long-term plans for the repository. In
this section, we will offer some advice on how to plan the
layout of your repository, and how to get your data arranged in
that layout.
Choosing a Repository Layout
While Subversion allows you to move around versioned files
and directories without any loss of information, doing so can
still disrupt the workflow of those who access the repository
often and come to expect things to be at certain locations.
Try to peer into the future a bit; plan ahead before placing
your data under version control. By “laying out”
the contents of your repositories in an effective manner the
first time, you can prevent a load of future headaches.
There are a few things to consider when setting up
Subversion repositories. Let's assume that as repository
administrator, you will be responsible for supporting the
version control system for several projects. The first
decision is whether to use a single repository for multiple
projects, or to give each project its own repository, or some
compromise of these two.
There are benefits to using a single repository for
multiple projects, most obviously the lack of duplicated
maintenance. A single repository means that there is one set
of hook scripts, one thing to routinely backup, one thing to
dump and load if Subversion releases an incompatible new
version, and so on. Also, you can move data between projects
easily, and without losing any historical versioning
information.
The downside of using a single repository is that
different projects may have different commit mailing lists or
different authentication and authorization requirements.
Also, remember that Subversion uses repository-global revision
numbers. Some folks don't like the fact that even though no
changes have been made to their project lately, the youngest
revision number for the repository keeps climbing because
other projects are actively adding new revisions.
A middle-ground approach can be taken, too. For example,
projects can be grouped by how well they relate to each other.
You might have a few repositories with a handful of projects
in each repository. That way, projects that are likely to
want to share data can do so easily, and as new revisions are
added to the repository, at least the developers know that
those new revisions are at least remotely related to everyone
who uses that repository.
After deciding how to organize your projects with respect
to repositories, you'll probably want to think about directory
hierarchies in the repositories themselves. Because
Subversion uses regular directory copies for branching and
tagging (see
Chapter 4, Branching and Merging
), the Subversion
community recommends that you choose a repository location for
each project root—the
“top-most” directory which contains data related
to that project—and then create three subdirectories
beneath that root: trunk
, meaning the
directory under which the main project development occurs;
branches
, which is a directory in which
to create various named branches of the main development line;
tags
, which is a directory of branches
that are created, and perhaps destroyed, but never
changed.
[21]
For example, your repository might look like:
/
calc/
trunk/
tags/
branches/
calendar/
trunk/
tags/
branches/
spreadsheet/
trunk/
tags/
branches/
…
Note that it doesn't matter where in your repository each
project root is. If you have only one project per repository,
the logical place to put each project root is at the root of
that project's respective repository. If you have multiple
projects, you might want to arrange them in groups inside the
repository, perhaps putting projects with similar goals or
shared code in the same subdirectory, or maybe just grouping
them alphabetically. Such an arrangement might look
like:
/
utils/
calc/
trunk/
tags/
branches/
calendar/
trunk/
tags/
branches/
…
office/
spreadsheet/
trunk/
tags/
branches/
…
Lay out your repository in whatever way you see fit.
Subversion does not expect or enforce a layout schema—in
its eyes, a directory is a directory is a directory.
Ultimately, you should choose the repository arrangement that
meets the needs of the people who work on the projects that
live there.