It might be worth using a build engine like hudson or cruise control. The workflow is slightly different - tags are created after assembly, but you can get additional modules that give you some control over this. The fact is that all the work of developers works for you, and you get a decent infrastructure for your nightly builds, and you get a good web interface for controlling and monitoring everything.
Personally, I put some external definitions on the body to pull the corresponding third-party libraries into the appropriate places. Thus, when you change the version of a third-party library, you make changes to the trunk and do not have to modify build scripts. It also means that you can create older versions just by checking the corresponding connecting lines / tags / branches. Be warned - just do them on the trunk, scattering them around, can lead to murder.
I would also repo a few layers:
project /trunk /branches /tags 3rdparty
Just because it gives you more options to add additional top-level projects at some point. This allows you to manage various projects completely independently - and you can still use external links to link to the correct versions from one to another, if there are dependencies - this perfectly stops changes in one project that silently violate / modify dependent projects.
This can also be done using separate repositories, which is good, but in this case I would separate the 3rdparty section from a separate repo from the very beginning.
Jim t
source share