This section is from the "Version Control with Subversion" book, by Ben Collins-Sussman, Brian W. Fitzpatrick and C. Michael Pilato. Also available from Amazon: Version Control with Subversion.
Creating a branch is very simple—you make a copy of
the project in the repository using the svn
copy command. Subversion is not only able to copy
single files, but whole directories as well. In this case,
you want to make a copy of the
/calc/trunk
directory. Where should the
new copy live? Wherever you wish—it's a matter of
project policy. Let's say that your team has a policy of
creating branches in the /calc/branches
area of the repository, and you want to name your branch
my-calc-branch
. You'll want to create a
new directory,
/calc/branches/my-calc-branch
, which
begins its life as a copy of
/calc/trunk
.
You may already have seen svn copy used to copy one file to another within a working copy. But it can also be used to do a “remote” copy entirely within the repository. Just copy one URL to another:
$ svn copy http://svn.example.com/repos/calc/trunk \ http://svn.example.com/repos/calc/branches/my-calc-branch \ -m "Creating a private branch of /calc/trunk." Committed revision 341.
This command causes a near-instantaneous commit in the
repository, creating a new directory in revision 341. The new
directory is a copy of /calc/trunk
. This
is shown in
Figure 4.3, “Repository with new copy”.
[20]
While it's also possible to create a branch by
using svn copy to duplicate a directory
within the working copy, this technique isn't recommended. It
can be quite slow, in fact! Copying a directory on the
client side is a linear-time operation, in that it actually
has to duplicate every file and subdirectory on local disk.
Copying a directory on the server, however, is a constant-time
operation, and it's the way most people create
branches.
[20] Subversion does not support copying between different repositories. When using URLs with svn copy or svn move, you can only copy items within the same repository.