The methodology used in software development to track and manage the changes in the files and documents over time is called version control or source control. The significant use case of version control is to allow multiple teams to work on duplicate files concurrently while maintaining the record of each modification. Before version control systems, people tend to copy files into directories which is incredibly error-prone as it is easy to forget which directory you are working to and accidentally copy over files you aren't intended to. To resolve this issue, programmers developed version control systems that keep all the file changes under revision control.
There are three types of version control systems:
Local version control systems.
Centralized version control systems.
Distributed version control systems.
In the local version control system, we only rely on revisioning files or projects residing on the local repository. It works by keeping
However, local version control has certain limitations regarding collaborative work. As the repository resides on a single system, it becomes difficult for multiple developers to work on the same project simultaneously and keep their changes in sync.
To resolve the issue of collaborative work with other teams or people on other systems, programmers developed centralized version control systems(CVCSs). For such systems, there is only one central server and multiple clients.
However, with so many benefits of centralized version control systems, like the ease of dealing with projects, it also has some drawbacks. The most oblivious one is the failure of the server. What if the central point of the whole system went down, whole data could get lost.
In distributed version control systems (DVCSs), each client mirrors the whole repository, including the entire history. So if any server goes down, the client has the complete information regarding each version and project on his local system, which means that the data is safe in any case and it is a bi-directional communication. If the client changes the local data, they can still copy it to their repository to keep the updated record. The best examples of DVCSs are Git, Bazaar, and Darcs.
DVCSs allow us to have multiple repositories to deal with simultaneously. Moreover, we can collaborate with different teams simultaneously on the same project.