I find that the Subversion Repository Layout blog post summarizes this pretty well:
(...) there are several common layouts
that have been adopted by the
community as best practices and
therefore one could think of these as
recommendations. If your repository is
accessible to the public, following
these conventions might make it easier
for users that have accessed other
Subversion repositories to find what
they are looking for.
There are two commonly used layouts:
trunk
branches
tags
This first layout is the best option
for a repository that contains a
single project or a set of projects
that are tightly related to each
other. This layout is useful because
it is simple to branch or tag the
entire project or a set of projects
with a single command:
svn copy url://repos/trunk url://repos/tags/tagname -m "Create tagname"
This is probably the most commonly
used repository layout and is used by
many open source projects, like
Subversion itself and Subclipse. This
is the layout that most hosting sites
like Tigris.org, SourceForge.net and
Google Code follow as each project at
these sites is given its own
repository.
The next layout is the best option for
a repository that contains unrelated
or loosely related projects.
ProjectA
trunk
branches
tags
ProjectB
trunk
branches
tags
In this layout, each project receives
a top-level folder and then the
trunk/branches/tags folders are
created beneath it. This is really the
same layout as the first layout, it is
just that instead of putting each
project in its own repository, they
are all in a single repository. The
Apache Software Foundation uses this
layout for their repository which
contains all of their projects in one
single repository.
With this layout, each project has its
own branches and tags and it is easy
to create them for the files in that
project using one command, similar to
the one previously shown:
svn copy url://repos/ProjectA/trunk url://repos/ProjectA/tags/tagname -m "Create tagname"
What you cannot easily do in this
layout is create a branch or tag that
contains files from both ProjectA and
ProjectB. You can still do it, but it
requires multiple commands and you
also have to decide if you are going
to make a special folder for the
branches and tags that involve
multiple projects. If you are going to
need to do this a lot, you might want
to consider the first layout.
So, to paraphrase:
- Use the first layout for a single or multiple related projects.
- Use the second layout for non related projects.
The whole post is worth the read.