<p>I know how to use tags in subversion. I create a tag every time I get to a release milestone.</p>

<p>What I don't quite understand is how they work. </p>

<p>Is a tag just a copy, made from what ever revision I specify? Or is a tag more like a reference, where internally subversion just says <code>GO TO /trunk/project/ Revision 5</code> or whatever.</p>

<p>The command to create a tag (<code>svn copy</code>) seems to imply that it's a copy, but I've seen other people write that subversion doesn't really copy anything.</p>

<p>Say I dump just the HEAD revision of a repository. I don't care about any history except the tags. Are those tags dumped along with the rest of the Head revision?</p>

<p>Finally, is all this just programming magic that I don't really want to know.</p>

Right, a tag is just a copy:
```
```
svn copy trunk tags/BLAH
```
```
When people say SVN doesn't really copy anything, they mean that the repository doesn't need to duplicate the data. It uses something akin to symbolic links to keep track of the copies.