Sometimes you will want to include another project within your working copy, perhaps some library code. You don't want to make a duplicate of this code in your repository because then you would lose connection with the original (and maintained) code. Or maybe you have several projects which share core code. There are at least 3 ways of dealing with this.
Set the svn:externals
property for a folder
in your project. This property consists of one or more lines;
each line has the name of a sub-folder which you want to use
as the checkout folder for common code, and the repository URL
that you want to be checked out there. For full details
refer to the section called “Referenced Projects”.
Commit the new folder. Now when you update, Subversion will pull a copy of that project from its repository into your working copy. The sub-folders will be created automatically if required. Each time you update your main working copy, you will also receive the latest version of all external projects.
If the external project is in the same repository, any changes you make there there will be included in the commit list when you commit your main project.
If the external project is in a different repository, any changes you make to the external project will be notified when you commit the main project, but you have to commit those external changes separately.
Of the three methods described, this is the only one which needs no setup on the client side. Once externals are specified in the folder properties, all clients will get populated folders when they update.
Create a new folder within your project to contain the common code, but do not add it to Subversion
Select
→ for the new folder and checkout a copy of the common code into it. You now have a separate working copy nested within your main working copy.The two working copies are independent. When you commit changes to the parent, changes to the nested WC are ignored. Likewise when you update the parent, the nested WC is not updated.
If you use the same common core code in several projects, and you do not want to keep multiple working copies of it for every project that uses it, you can just check it out to a separate location which is related to all the other projects which use it. For example:
C:\Projects\Proj1 C:\Projects\Proj2 C:\Projects\Proj3 C:\Projects\Common
and refer to the common code using a relative path, eg.
..\..\Common\DSPcore
.
If your projects are scattered in unrelated locations you
can use a variant of this, which is to put the common
code in one location and use drive letter substitution to
map that location to something you can hard code in your
projects, eg. Checkout the common code to
D:\Documents\Framework
or
C:\Documents and Settings\{login}\My Documents\framework
then use
SUBST X: "D:\Documents\framework"
to create the drive mapping used in your source code. Your code can then use absolute locations.
#include "X:\superio\superio.h"
This method will only work in an all-PC environment, and you will need to document the required drive mappings so your team know where these mysterious files are. This method is strictly for use in closed development environments, and not recommended for general use.