Like several other source control systems, Subversion does rename via branch/delete - of course, since branch is just another name for copy in Subversion, it's a copy and delete.

Say I decide on a rename and then decide against it.  It takes 3 operations (2 svn revert's and a rm) to get back to my initial state.

~/dev/project/testing/dir% ls -l
total 4
-rw------- 1 jmm jmm 4 Apr 20 12:08 foo.txt
~/dev/project/testing/dir% svn status
~/dev/project/testing/dir% svn rename foo.txt bar.txt
A bar.txt
D foo.txt
~/dev/project/testing/dir% ls -l
total 4
-rw------- 1 jmm jmm 4 Apr 20 12:10 bar.txt
~/dev/project/testing/dir% svn status
D foo.txt
A + bar.txt
~/dev/project/testing/dir% svn revert bar.txt
Reverted 'bar.txt'
~/dev/project/testing/dir% ls -l
total 4
-rw------- 1 jmm jmm 4 Apr 20 12:10 bar.txt
~/dev/project/testing/dir% svn status
? bar.txt
D foo.txt
~/dev/project/testing/dir% svn revert foo.txt
Reverted 'foo.txt'
~/dev/project/testing/dir% svn status
? bar.txt
~/dev/project/testing/dir% ls -l
total 8
-rw------- 1 jmm jmm 4 Apr 20 12:10 bar.txt
-rw------- 1 jmm jmm 4 Apr 20 12:11 foo.txt
~/dev/project/testing/dir% rm bar.txt
~/dev/project/testing/dir% ls -l
total 4
-rw------- 1 jmm jmm 4 Apr 20 12:11 foo.txt
~/dev/project/testing/dir% svn status
~/dev/project/testing/dir%

In Team Foundation, we treat rename as its own operation, separate from branch (label and undelete are also their own operations as well).  This makes our job tougher, but (should make) your life easier.

C:\test\tfs>h rename foo.txt bar.txt
bar.txt

C:\test\tfs>dir
Volume in drive C has no label.
Volume Serial Number is 2088-B3A5

Directory of C:\test\tfs

04/20/2005  01:49 PM    <DIR>          .
04/20/2005  01:49 PM    <DIR>          ..
04/20/2005  01:48 PM                 4 bar.txt
              1 File(s)              4 bytes
              2 Dir(s)  11,778,043,904 bytes free

C:\test\tfs>h status
File name Change Local path
--------- ------ ---------------------------------------------------------------
$/proj
bar.txt   rename C:\test\tfs\bar.txt

1 change(s)

C:\test\tfs>h undo bar.txt
undoing rename: bar.txt

C:\test\tfs>dir
Volume in drive C has no label.
Volume Serial Number is 2088-B3A5

Directory of C:\test\tfs

04/20/2005  01:49 PM    <DIR>          .
04/20/2005  01:49 PM    <DIR>          ..
04/20/2005  01:48 PM                 4 foo.txt
              1 File(s)              4 bytes
              2 Dir(s)  11,778,027,520 bytes free

C:\test\tfs>h status
There are no pending changes.

C:\test\tfs>

This is a known state of affairs in Subversion, of course.  BitKeeper had called it out (see Subversion's debunking page) and it's been agreed to and is being worked on.

    It's true that Subversion has weak rename support (work is under way to fix this).