B.6. Include a common sub-project
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 Section 4.18, “External Items”.
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 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.
B.6.2. Use a nested working copy
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.
B.6.3. Use a relative location
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, e.g.
..\..\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, e.g. 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.