We've covered a lot of ground in this chapter. We've discussed the concepts of tags and branches and demonstrated how Subversion implements these concepts by copying directories with the svn copy command. We've shown how to use svn merge to copy changes from one branch to another or roll back bad changes. We've gone over the use of svn switch to create mixed-location working copies. And we've talked about how one might manage the organization and lifetimes of branches in a repository.
Remember the Subversion mantra: branches and tags are cheap. So use them liberally!
As a helpful reminder of all the operations we've discussed, the following table is a handy reference that you can consult as you begin to make use of branches.
Table 4.1. Branching and merging commands
|Create a branch or tag||svn copy URL1 URL2|
|Switch a working copy to a branch or tag||svn switch URL|
|Synchronize a branch with trunk||svn merge trunkURL; svn commit|
|See merge history or eligible changests||svn mergeinfo target [--from-source=URL]|
|Merge a branch back into trunk||svn merge --reintegrate branchURL; svn commit|
|Merge one specific change||svn merge -c REV URL; svn commit|
|Merge a range of changes||svn merge -r REV1:REV2 URL; svn commit|
|Block a change from automatic merging||svn propset svn:mergeinfo newvalue; svn commit|
|Preview a merge||svn merge URL --dry-run|
|Abandon merge results||svn revert -R .|
|Resurrect something from history||svn copy URL@REV local-path|
|Undo a committed change||svn merge -c -REV URL; svn commit|
|Examine merge-sensitive history||svn log -g; svn blame -g|
|Create a tag from a working copy||svn copy . tagURL|
|Rearrange a branch or tag||svn mv URL1 URL2|
|Remove a branch or tag||svn rm URL|