If branches and tags are just regular revisions in the repository, could the following issue arise. First person commits changes to branch (r50), second person commits to trunk (r51). Second person wants to find the diffs of
their last commit, so they do a diff between 51 and, logically they assume, 50. But 50 wasn't even in the trunk, and they get a weird set of diffs...
Is this possible, or have I missed something? How can you get around this?
The entire repository exists at every revision, so the diff between 51 and 50 would give you exactly what you want.
Secondly, I created a branch in REPO/branches/branch1, but the project actually went under REPO/branches/branch1/PROJECT_NAME... What's typically done around creating branches and tags? Does each branches/branch1 or
tags/tag1 folder contain the project name underneath - wouldn't it make more sense for the branch1 or tag1 folder to contain all folders/files in the project directly underneath, rather than being an empty folder apart from
only the PROJECT_NAME folder?
This is the behavior you get if you create the branch1 folder yourself, instead of letting the copy operation do it. Apparently, that is also how the copy command would work on a Unix filesystem, which is why the SVN devs made it work that way.