Before starting selecting tools, one should start with identifying what the tool should do. How is your development process, do you have big teams or a single developer. Do you plan to put source code only, documents, releases … etc in source control.
Are you using source control tools to manage different sites. To make collaboration possible, or do you use it as a back-up means.
Are you integrating source control with change management, release management, issue tracking?
Source control is often mixed with other things that closely correlate. The most obvious is Software Life Cycle management. It is also mixed with project management, release management and deployment. Please make sure you understand the differences before going any further.
Divide following requirements into absolutely required, nice to have and do not need:
|Source control for individual changes||Keep changes in source control, how much per day?|
|Keep source for certain release||Be able to retrieve the exact source of a version in production|
|Concurrent development||Be able to work with multiple people on the same project or on multiple changes at once|
|Platform support||Allow to access repository from all platforms that are used in the development process|
|Delta generation||Generate report with all changes in between 2 arbitrary versions or in between 2 dates|
|Work with sets||Be able to link different changes together so they get reported together (eg. java refactoring, change spawning hundreds of files)|
|2 phase commit||Be able to prepare for commit, review and revert.|
|Gatekeeper||Allow a multi-level review of the changes so some changes get reviewed|
|Unplanned work||Allow to use all parts of the native IDE, such as search/replace, refactor, without prior planning.|
|Planned work||Force named check-out and attach to change-set or release|
|Chaos development support||Allow development lead to decide on branching, tagging, views, merging.|
|Binary support||Allow to store documents and release binaries in source control.|
|Metadata support||Keep additional information on versions in the repository|
|Integration/Stand alone||Integration in bug-tracking, change management, release management, project management, browser, time tracking, …|
|Reporting||Advanced reporting and filtering on changes for release-note generation, analysis, audit, …|
|Distributed/Central||Support for either distributed deployment, or centrally managed deployment. Be able to work off-line|
|Access control||Define what level of access control each person should have, guest support, local admins, …|
|Adoption||Learning curve, enforce rules, speed of operation, import old history|
Once you filled in above list to mark your requirements, you can start selecting the right tool for your needs.