Best practice for creating subversion repositories?

  • SVN managment standpoint I prefer 1 repository.
  • Programmer standpoint I prefer 1 repository.
  • Server Administrator I prefer 1 repostitory.
  • Security standpoint it is preferrable not to put all of your eggs in one basket.

Your repository structure will be somewhat unique to your business, and it's products. We keep ours in one repository. Our structure somewhat like this.

  • /
    • Projects
      • Project Name
        • trunk
        • branches
        • tags
    • Documentation
      • Project 1
    • Shared Libraries
      • Super string class
    • Small utilities
      • vim enhancement X

Generally, you want to use a separate repository in any case where you are expecting different access permissions (i.e. some developers should have commit access to one project, but not another, or one project has a public read-only anonymous interface but another doesn't).

You want everything in one repository if you don't need that level of access control, especially if you need to be able to copy or move files between projects (i.e. projects might share code).

Put your trunk/tags/branch split at whatever level corresponds to a chunk of code you might release as a single package (i.e. think of where you would tag). This isn't critical to get right at first, since these no different internally from any other folder, so you can just move things around later, though of course it's neater not to have that problem.


My source of inspiration:

  • Version Control with Subversion
  • Subversion Repository Layout
  • Single Repository or Many
  • Multiple Subversion repositories

We use one big repository, and just have everything structured in subfolders (/project1, /project2 etc) and that seems to work fine.

The Apache project has a huge svn repository and it seems to do OK for them! :)

In terms of organisation, the structure you gave looks quite reasonable. I think anything goes, pretty much, so long as it's rational (i.e. mixing up every single tool with every single project is probably a bad idea etc). So pick something which works for you (tools/, projects/ etc). Subversion has pretty good support for moving things around in the repository, too, so you can always change if necessary.