What is version control?
Version Control is a mechanism that tracks changes to a file, or collection of files, over time so that you can restore specific versions later. This is very useful as projects evolve and as teams evolve. It allows you to modify your file with the ability to recover previous versions of the file in case something were to go wrong.
Local Version Control System
A local version control system is a simple database on your local computer. This database tracks all the version files within your local system.
However, it makes it really difficult to collaborate with other developers, since the database is only available on your local machine.
Centralized Version Control System
A Centralized Version Control System is a hosted shared server that contains all file versions. This system is accessible by many clients from one central location.
The Centralized Version Control System allows for a more collaborative experience, where each team member can work together on the same project and keep track of all the changes done on each system. However, since this setup is centralized in one location, if that server goes down or is corrupted, then there is a risk of permanently losing the entire history of the project.
Distributed Version Control Systems
A Distributed Version Control System solves the issue above where clients can mirror the entire history of their repository.
A distributed version control system can be very useful in mitigating loss of data from a single point of failure. This setup allows any client repository to backup and restore the data back in the server.
Distributed version control systems include developments such as git, mercurial, Bazaar, etc.