I am new to SVN. How should I organize the project directory structure on my computer (NOT in REPOSITORY)? Should it be the same as in the repository (trunk, tags, branches) or is it usual to use a different structure? Thanks.
Once you checkout from repo, the repository structure will be replicated on your disk. The only thing you should decide on is the actual root directory name, and that's it.
I would say it totally depends on the application and how you're working with it. If you are working on different branches, you could checkout the whole repository to easily commit to each of them.
If you have only read access, you should only check out the branch you're interested in (otherwise it doesn't harm except some megabytes).
You could ask other guys working with the same project, how they organize their environment. E.g. for TYPO3 CMS you can point symlinks to the source folder and thus easily check out the whole repository. With other applications, this is not possible, for sure.
You can make local directory structure different from the one in the repository using svn switch
as you see fit.
The format I tend to use is to checkout just the branch, tag or trunk that I need. I can of course, checkout multiple braches, or even the same branch multiple times if I need to for some reason.
I don't checkout the entire project's trunk branches and tags - that's just perverse. I like to encourage multiple branches for experimentation and work, as well as tags at every opportunity. Bringing all of this down when I'm interested in <1% of them would just be a waste of everyone's time.
For simplicity, I tend to put all of these working copies in the same folder, named so that I can identify them:
eg:
c:\development
\EmergencyFix-UICrash-V1.8
\Refactoring-ServerComponent
\NewCustomerUI
Under each working copy, it's a straight copy of the branch as it appears in the repository. It's important that you can just checkout a branch and have the correct structure in the working copy on your disk. If you have to manually move things around, or copy things to specific locations, or check different things out to different locations, then that's a lot of build information being carried around separate to your source code (and it's usually only in your heads, maintenance nightmare!). Keep it all together, let your source control tool do the heavy lifting for this and you might stand a chance of getting control over your builds.
If you really can't live with the working copy mirroring the branch's structure, svn:externals can be leveraged to close the gap in a controllable manner. Whilst I know some feel that they're an anti-pattern, I feel they offer an invaluable and powerful option when used in a sane manner.
But be warned ... having a working copy that's a mix of two dozen other repository checkouts, none of which are guaranteed stable defined at multiple locations and changing unpredictable random subdirectories isn't using externals in a sane manner ...