Creating a branch is very simple—you make a copy of the project in the repository using the svn copy command. Subversion is able to copy not only 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, as shown in Figure 4-3.[20] While it’s 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 the 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.