I come from a CVS background. I'm currently investigating using SVN for a project. The code that I work on tends to be in the following directory structure.
project\libs\lib1
project\libs\lib1\test
project\libs\lib1\mock
project\libs\lib2
etc.
When I tag a release, in CVS, I tend to create two tags one being "project-release-1" and one being "project-release-1-with-tests". The "project-release-1" tag excludes the test directories and mock directories and possibly some other files. The idea being that we often don't ship our test source to clients and by doing an export of the "project-release-1" tag we get a client's set of source that we can ship to them and by doing a checkout on the "project-release-1-with-tests" tag we get the whole lot that we can use for branching if need be for ongoing development.
How do I do something similar with SVN? Ideally in a form that can be scriptable; with SVN we have a script per project which will apply both tags and create the client tag by simply removing the tag from the test and mock directories, etc...
I'm guessing that in SVN I'd create the "with tests" tag, then (somehow) check that out, delete the test and mock directories and create the client release tag?
Update:
I've decided to change how I do things... Rather than having a script per project that sets up my old style twin tags I now have a script per project that takes the tagged release (which includes the stuff that I don't ship to clients) and removes the stuff that I don't ship to clients. Job done, only one tag needed.