Subversion: Can I checkout, modify, and then make it a branch?

Frank picture Frank · Aug 20, 2009 · Viewed 29.3k times · Source

I did a checkout from my trunk to a local DIR and made lots of local changes there. Now I don't want to commit it back to the trunk, but I'd rather make a branch from this local version. Is that possible?

Can I just copy the trunk to a branch, and then cd DIR and svn switch to the branch?

UPDATE: Thanks for the answers, it worked! To summarize the steps:

  • cd DIR
  • svn copy . new-branch-URL
  • svn switch new-branch-URL .

(note the dots)

Answer

Lucas picture Lucas · Sep 20, 2011

The SVN Book (http://svnbook.red-bean.com/en/1.6/svn-book.html#svn.branchmerge.using.create) doesn't recommend creating a branch from the local working copy.

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 within that working copy directory on the local disk.

Instead, create the branch first and then use the svn switch command so you can commit your changes. If your working copy is significantly out of date with the trunk then append "@REV" to the source URL where "REV" is the revision of your working copy reported by svn info.

Copying a directory on the server, however, is a constant-time operation, and it's the way most people create branches.

$ 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."