Free SVN Hosting, Trac, SSL, ACLs, Petabyte Storage
Before you import your data into the repository you should first think about how you want to organize your data. If you use one of the recommended layouts you will later have it much easier.
There are some standard, recommended ways to organize a
repository. Most people create a trunk
directory to hold the "main line" of development, a
branches directory to contain branch
copies, and a tags directory to contain
tag copies. If a repository holds only one project, then
often people create these top-level directories:
/trunk /branches /tags
If a repository contains multiple projects, people often index their layout by branch:
/trunk/paint /trunk/calc /branches/paint /branches/calc /tags/paint /tags/calc
...or by project:
/paint/trunk /paint/branches /paint/tags /calc/trunk /calc/branches /calc/tags
Indexing by project makes sense if the projects are not closely related and each one is checked out individually. For related projects where you may want to check out all projects in one go, or where the projects are all tied together in a single distribution package, it is often better to index by branch. This way you have only one trunk to checkout, and the relationships between the sub-projects is more easily visible.
If you adopt a top level /trunk /tags /branches
approach, there is nothing to say that you have to copy the entire trunk
for every branch and tag, and in some ways this structure offers the
most flexibility.
For unrelated projects you may prefer to use separate repositories. When you commit changes, it is the revision number of the whole repository which changes, not the revision number of the project. Having 2 unrelated projects share a repository can mean large gaps in the revision numbers. The Subversion and TortoiseSVN projects appear at the same host address, but are completely separate repositories allowing independent development, and no confusion over build numbers.
Of course, you're free to ignore these common layouts. You can create any sort of variation, whatever works best for you or your team. Remember that whatever you choose, it's not a permanent commitment. You can reorganize your repository at any time. Because branches and tags are ordinary directories, TortoiseSVN can move or rename them however you wish.
Switching from one layout to another is just a matter of issuing a series of server-side moves; If you don't like the way things are organized in the repository, just juggle the directories around.
So if you haven't already created a basic folder structure inside your repository you should do that now:
create a new empty folder on your hard drive
create your desired top-level folder structure inside that folder - don't put any files in it yet!
import this structure into the repository via a right click on the folder and selecting → This will import your temp folder into the repository root to create the basic repository layout.
Note that the name of the folder you are importing does not appear in the repository, only its contents. For example, create the following folder structure:
C:\Temp\New\trunk C:\Temp\New\branches C:\Temp\New\tags
Import C:\Temp\New into the repository root,
which will then look like this:
/trunk /branches /tags
You can also use the repository browser to create new folders directly in the repository.
Before you import your project into a repository you should:
Remove all files which are not needed to build the project (temporary files, files which are generated by a compiler e.g. *.obj, compiled binaries, ...)
Organize the files in folders and subfolders. Although it is possible to rename/move files later it is highly recommended to get your project's structure straight before importing!
Now select the top-level folder of your project directory structure in the windows explorer and right click to open the context menu. Select the command → which brings up a dialog box:
In this dialog you have to enter the URL of the repository into which you want to import your project.
The import message is used as a log message.
By default, files and folders which match the global-ignore patterns are not imported. To override this behaviour you can use the Include ignored files checkbox. Refer to the section called “General Settings” for more information on setting a global ignore pattern.
As soon as you press TortoiseSVN imports the complete directory tree including all files into the repository. As before, the name of the folder you import does not appear in the repository, only the folder contents. The project is now stored in the repository under version control. Please note that the folder you imported is NOT under version control! To get a version-controlled working copy you need to do a Checkout of the version you just imported.
Sometimes you need to have a file under version control which contains user specific data. That means you have a file which every developer/user needs to modify to suit his/her local setup. But versioning such a file is difficult because every user would commit his/her changes every time to the repository.
In such cases we suggest to use template files.
You create a file which contains all the data your developers
will need, add that file to version control and let the developers
check this file out. Then, each developer has to make a copy
of that file and rename that copy. After that, modifying the copy
is not a problem anymore.
As an example, you can have a look at TortoiseSVN's build script. It
calls a file named TortoiseVars.bat which
doesn't exist in the repository. Only the file
TortoiseVars.tmpl.
TortoiseVars.tmpl is the template file which
every developer has to create a copy from and rename that file
to TortoiseVars.bat. Inside that file, we added
comments so that the users will see which lines they have to edit
and change according to their local setup to get it working.
So as not to disturb the users, we also added the file
TortoiseVars.bat to the ignore list of its
parent folder, i.e. we've set the Subversion property
svn:ignore to include that filename.
That way it won't show up as unversioned on every commit.
Sometimes it is useful to construct a working copy that is made out
of a number of different checkouts. For example, you may want different
subdirectories to come from different locations in a repository, or
perhaps from different repositories altogether.
If you want every user to have the same layout, you can define the
svn:externals properties.
Let's say you check out a working copy of
/project1 to
D:\dev\project1.
Select the folder D:\dev\project1,
right click and choose
→
from the context menu.
The Properties Dialog comes up. Then go to the Subversion tab.
There, you can set properties. Select the
svn:externals property from the combobox and
write in the edit box the repository url in the format
name url
or if you want to specify a particular revision,
name -rREV url
You can add multiple external projects, 1 per line.
Note that URLs must be properly escaped or they will
not work properly. For example you must replace each space with
%20. Note that it is not possible to use
foldernames with spaces in them.
Suppose that you have set these properties on
D:\dev\project1:
sounds http://sounds.red-bean.com/repos quick_graphs http://graphics.red-bean.com/repos/fast%20graphics skins/toolkit -r21 http://svn.red-bean.com/repos/skin-maker
Now click and commit your changes.
When you (or any other user) update your working copy, Subversion
will create a subfolder
D:\dev\project1\sounds and checkout the sounds
project, another subfolder D:\dev\project1\quick graphs
containing the graphics project, and finally a nested subfolder
D:\dev\project1\skins\toolkit containing
revision 21 of the skin-maker project.
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.
Note that if you change the URL in an svn:externals
property, then next time you update your working copy Subversion will
delete the old external folder and make a fresh checkout, so you
will see files being Added, rather than being
Updated as you might have expected. This
situation might occur if you reference a tag from another
project. When a new version of that project is released, you
change your external reference to point to the new tag.
Tip
You should strongly consider using explicit revision numbers in all of your externals definitions. Doing so means that you get to decide when to pull down a different snapshot of external information, and exactly which snapshot to pull. Besides the common sense aspect of not being surprised by changes to third-party repositories that you might not have any control over, using explicit revision numbers also means that as you backdate your working copy to a previous revision, your externals definitions will also revert to the way they looked in that previous revision, which in turn means that the external working copies will be updated to match they way they looked back when your repository was at that previous revision. For software projects, this could be the difference between a successful and a failed build of an older snapshot of your complex codebase.
URLs in svn:externals definitions are absolute.
You cannot use relative URLs. If you relocate your working copy,
or if the external repository is relocated, these URLs will not be
updated automatically. Also, if you branch a project which has
external references within the same repository, the URLs in the
branched copy will be unchanged; you may then want to change trunk
references to branch references instead.
If you need more information how TortoiseSVN handles Properties read the section called “Project Settings”.
To find out about different methods of accessing common sub-projects read the section called “Include a common sub-project”.
All Plans Include
![]() |
![]() | All plans free for 2008 |
![]() | Trac wiki linked to each repository |
![]() | Online management tools |
![]() | Access control lists (ALCs) |
![]() | Read only or read write users |
![]() | Secure HTTPS connections |
![]() | Data mirrored onto backup servers |
![]() | Disk usage reporting |
![]() | Online invoices & payments |
![]() | Unlimited support |
![]() | Click for Free Subversion Hosting |


