What's Your Ideal Source Control Setup?
Our needs are changing though, and our team is clearly outgrowing the feature set that SourceSafe provides. From directory-level branching to better binary file compression and storage to concurrent editing, Subversion clearly fulfills our needs...and it's free to boot. I keep my personal files in a Subversion repository at home, so I'm familiar with it when working on one machine. However, now I need to set it up for a couple of our departments (we got some non-IT departments into version control!) and I'm trying to figure out the best way to do it. The requirements are fairly straightforward:
- All access will be internal. In fact, no public access will be granted to anybody. However, not all users will have an account on the repository's server.
- Must be able to fully migrate the existing VSS repository to Subversion.
- Must be able to support roughly 15-20 users concurrently accessing the repository. There may be more user than that overall, but that's the targeted number of actual concurrent use.
- Must be able to lock down certain projects such that users must authenticate themselves when trying to access the files.
OK, now that the requirements have been stated, I need your help figuring out the best approach.
First and foremost, where to physically put the repository. We have a shiny new development box (running Red Hat Linux 4.0) for our team with tons and tons of free space. I was thinking about creating a partition there dedicated to housing the repository. At the same time, I'm hesitant to put the repository on the same box as where most of the development is going to be taking place (we all have our own JRun/ColdFusion instances on this box, so we're separate, but sharing the same overall resources). I just don't trust all the banging that the box will be taking to house our core file repository, even though we'll be taking proper backups on a nightly basis. Should I phsyically separate the repository from the dev box?
With regard to the network protocol, from my research, it seems like the best setup is to install Apache on the server and manage the file access and user autentication using the mod_dav_svn module. However, this feels like overkill to an extent. I have the excellent book Pragmatic Version Control using Subversion 2nd Ed. by Mike Mason (and published by Dave Thomas and Andy Hunt of Pragmatic Programmer fame), so I'm aware of the pros and cons of each of the protocol options (svnsserve, svnserve+ssh, and Apache). However, I'm looking for other real-world opinions on each, based on the stated requirements.
With regard to migrating the existing VSS repository, this is a biggie. The problem I have with a lot of the current presentations about using Subversion is that they all assume that you're starting with a clean slate. However, we have literally years worth of comments, tags, labels, etc., that are an absolute "must keep." To that end, I have been monitoring the open source project Vss2Svn with the hopes of using their solution for migrating our repository. However, it doesn't look quite ready for prime time just yet. Has anybody succesfully used it by chance? I also found a solution from Polarion called Subversion Pro that looks to be free for at least the migration aspects of the product. Has anybody used this one?
Lastly, are there any tips on the best way to set up authorization/authentication? Anything else I'm overlooking? We're currently using the amazing FogBugz project management system from Fog Creek software (it integrates with virtually all source code management systems, which is great), so we don't need things like Trac.
Thanks for any insights.
