I'm using tortoisesvn to create the repositories and wondered if there was a way it could automatically create a skeleton directory structure within the repository?
I need this as I'm going to allow other people in the team to set-up new repositories and 开发者_StackOverflow社区I need to make it as simple as possible and minimise mistakes. I would like the tags, branches and trunk directories to be created automatically.
You can write a script (in the language of your choice) that creates the repository and commits the predefined directory structure, using the svn
command line client.
Make a script. If you are on Windows, a bat. On Linux etc, an bash.
I would suggest the following approach:
- create an empty repository
- check out a working copy of that empty repository
- add trunk/branches/tags folders
- set properties on those folders (e.g., if you're using TSVN you might want to set the tsvn:minlogsize and/or the tsvn:autoprops properties)
- commit those folders
- run
svnadmin dump path/to/Repo > templaterepo.dmp
Now you have a template repository with some settings and folders pre-set.
All you need now is a script which does:
- svnadmin create path/to/new/Repo
- svnadmin load --ignore-uuid path/to/new/repo < templaterepo.dmp
and you're done.
But don't forget to pass the --ignore-uuid
param to svnadmin load
! Otherwise you'll end up with all your repositories having the same uuid - and that will cause problems!
As this is just a convention for organizing a Subversion repository and you don't actually want them at the top level all the time I doubt there is a way to do that automatically on repository creation. Usually you don't create multiple repositories per hour or so anyway.
This is how I automatically create a branches
folder (assuming trunk
already exists) so I can automatically branch. This is written in C# and uses the SharpSVN dll to do the work. Then it calls TortoiseSVN (not shown) to do the branch.
using SharpSvn;
SvnClient client = new SvnClient();
Uri trunkUri = client.GetUriFromWorkingCopy(trunkPath);
if (trunkUri.Segments.Last() != "trunk/")
{
MessageBox.Show(String.Format("Will skip {0}, because first trunk path does not end in \"trunk\\\"",trunkPath));
return;
} else {
System.UriBuilder builder = new UriBuilder(trunkUri);
builder.Path += "../branches/";
Uri parent = builder.Uri;
System.Collections.ObjectModel.Collection<SvnInfoEventArgs> info;
bool result = client.GetInfo(SvnTarget.FromUri(parent), new SvnInfoArgs { ThrowOnError = false }, out info);
if (result == false)
{
SvnCreateDirectoryArgs args = new SvnCreateDirectoryArgs();
args.CreateParents = true;
args.ThrowOnError = true;
args.LogMessage = String.Format("Creating new branch \"{0}\"", branchName);
client.RemoteCreateDirectory(parent, args);
}
builder.Path += branchName;
Uri newUrl = builder.Uri;
TortoiseSVN.Copy(trunkPath, newUrl.ToString(), comment);
}
Update for TortoiseSVN 1.7
When you create repository now, after creating you have window with two post-create choices
- Create folder structure
- Run repo-browser
First point is answer on question
精彩评论