It is also known as version control and source control. The goal of this tool is to record changes made to files such as source code files by applying time-stamp and version number. This provides the user with history of changes for a given file as well as backup in case of file corruption. This tool is mainly used for text files rather than binary files as it is easy to record line by line differences on a text file compared to the previous version rather than copying the entire file over again. Copying an entire file over again, would result in waste of space. Version controlling a binary file cannot give you any detailed history other than when it was changed and not what has changed.
These systems come in two different storage models: centralised and decentralised. In a centralised model (client-server) all the revision control takes place on a shared server (can be local or in cloud). The user can download a version onto his/her local machine to work on it and submit the changes back to the server. The decentralised (distributed) model takes a peer-to-peer approach. Each user will have the entire copy of the repository, locally. In comparison to the centralised model, all the data what used to be on a server is now on every user’s machine. This makes it easy for each user to work disconnectedly and synchronise with each other when they go online. Synchronisation process is called patching, i.e. patching each other’s data with changes.
Check out this wiki page that compares several revision control systems.
Check out this wiki page that compares several revision control systems.
Things to look for:
- Centralised (only work online) or decentralised (also work off-line)?
- Will it be actively maintained?
- Will it come with new features?
- Do we start from scratch or maintain change history? If the latter, how about migration?
- How about integration with Visual Studio 2010?
- Which features/techniques are important?
Look into the following actively developed revision control systems for us: Git, Mercurial, Subversion (SVN) and TFS. The first two are decentralised and the other 2 are centralised.
Note: TFS 2011 still has a centralised model, but the way it commits changes has changed due to the new Local Workspaces concept.
Note: If you have to use TFS, there is still Git-To-TFS that allows you to synchronise TFS into Git and then work as a Git repository. More on it here.
Note: Some information about the branching technique of Git can be found here.