We're currently using StarTeam for our project, and the license is expiring soon. We're looking at moving to Team Foundation Server or something similar, but there's a push (mostly from myself and one other person) to move to some form of distributed version control. One of the problems is that our change manager wants to be able to track and release by change request (as in StarTeam), and I don't believe this can be easily done with Mercurial or Git out-of-the-box (please correct me if I'm wrong).
This is a 15+ year-old product with thousands of java files and PL/SQL packages, maintained by 5-6 development subteams with a total of 30-40 developers. To me, that seems like it would make a distributed repository a nightmare with the "commit early, commit often" mindset. The fact that each team would be working on a completely different subsystem in the same repository makes it even nastier in my mind.
Our current StarTeam process for any change is as such:
- Lock the file(s) you want to work on,
- Make your entire change and get it reviewed from a copy on a network drive,
- Check in (and unlock) the changed files, hoping that someone hasn't forcibly broken your lock,
- Hope that your change hasn't broken the build from someone else's change to other files
Personally, I think the idea of "locking" files is ridiculous. There should be enough communication between teams such that you don't need to.
Does anyone here have experience with distributed repositories on projects of a similar size? Could you make any suggestions as to version control and/or change management solutions? The main requirement is that the system be able to manage customer-initiated change requests and force developers to link their checkins to one.
Thanks.
Both Git and Mercurial is being used for projects with complexity far greater than what you have mentioned. So Using Git / Mercurial for your project team size should not be an issue.
By nature, we want more control on the version control server. Subversion is quite popular due to that.
How ever it is easy to maintain releases based on change-set using DVCS like Mercurial or Git.
You can have a repo setup where change-sets are pushed only after review. This should mitigate the requirements of your change manager.
DVCS do come with advantage that you could create experimental branches or clones easily, throw them out if it does not work and pull the changes in when you believe they are ready for primetime. Commit often / Commit early is a practice which works well with DVCS because you push changes to your own repo. Once it is baked, you can push it upwards for availability within the team.
Locking of files is an old era. It is not being used even by tools like Subversion. It is really a impediment to working.