My SW group is trying to update our source control system from Visual Source Safe, which is no longer supported by Microsoft, to Subversion (because our sister site already uses it). We have a lot of shared code which in VSS can be done directly with internal links. These will need to be moved into shared folders for multiple projects to use. Although externals can be used to bring these in, they are somewhat risky and not naturally integrated into the SVN architecture (although we still intend to use them for third party code and other stuff that doesn't change). Anyway, we came up with a solution that I haven't seen described anywhere but we all think makes sense so I wanted to see what others thought and if there are pitfalls (have not actually tried it live yet).
So I'm calling this "Shared Internal" folders, to contrast with externals. Suppose I have a directory called Common_Code in my repository root containing generic library files for a given language (C++ in this case). Now I create MyProject, with trunk/branches/tags, and want to put the shared folder in a subdirectory of my project. So I create a normal subversion branch that branches from Common_Code to MyProject/trunk/Common_Code. So various team members work on MyProject by branching off the trunk. Bob's branch might look like this: MyProject/branches/Bob_Working and the subfolder would branch to MyProject/branches/Bob_Working/Common_Code. This is effectively a branch of the branch of the shared folder.
When Bob is finished, he merges back to the trunk. This continues without interfering with any other project that might have also created an "internal branch" off the root shared folder. We eventually release our product, but find that we made some generic changes to Common_Code that would benefit other projects. So after some group review, we agree to merge our project's version of Common_Code back to the root version from which is was initially taken. This decouples the need to update shared code for a release from the need to share the changes with the rest of the company.
This seems like a simple yet flexible way to natively share code. I see two possible limitations. First, it won't work across repositories, in which case externals will need to be used. Second, you cannot delete the first branch after merge, so I don't think -reintegrate would be used. I still am not sure if just a normal merge back would be acceptable or if our Tortoise client supports it.