Lets assume a project committer wants to tag or branch a project located in a remote Subversion repository. Assuming this repository has been laid out according to the recommendations in How to Organize a Subversion Repository, the following command could be used to tag the trunk of project1 located within the FOO repository:

svn copy \
     svn+ssh://svn.FOO.codehaus.org/home/projects/FOO/scm/project1/trunk \
     svn+ssh://svn.FOO.codehaus.org/home/projects/FOO/scm/project1/tags/tag-name

Likewise, a branch can be made in the same manner:

svn copy \
     svn+ssh://svn.FOO.codehaus.org/home/projects/FOO/scm/project1/trunk \
     svn+ssh://svn.FOO.codehaus.org/home/projects/FOO/scm/project1/branches/branch-name

After creating a branch, it is likely you will want to switch to that branch in your current working copy of the project. This can be done with the following command:

svn switch \
     svn+ssh://svn.FOO.codehaus.org/home/projects/FOO/scm/project1/branches/branch-name

Finally, there is no concept of a tag or branch within Subversion. They are both simply inexpensive copies made within the repository. It is up to the committers to honor that items in the tags directory are not modified directly. This can be enforced using hooks in the current version of Subversion if desired. In the future, a better security mechanism will be developed by the Subversion team.