Version control systems are divided into two groups: “centralized” and “distributed”. Centralized Version Control Systems (CVCSs) and Distributed Version Control Systems (DVCSs) serve different needs in software development. In this blog post, we'll describe them and list some of the main pros and cons of both systems.
Centralized Version Control Systems
Centralized Version Control Systems were developed to record changes in a central system and enable developers to collaborate on other systems. Centralized Version Control Systems have a lot to offer, however they also have some serious disadvantages.
Some benefits of Centralized Version Control Systems:
- Relatively easy to set up
- Provides transparency
- Enable admins control the workflow
Disadvantages of Centralized Version Control Systems:
- If the main server goes down, developers can’t save versioned changes
- Remote commits are slow
- Unsolicited changes might ruin development
- If the central database is corrupted, the entire history could be lost (security issues)
Distributed Version Control Systems
Distributed Version Control Systems (DVCSs) don’t rely on a central server. They allow developers to clone the repository and work on that version. Develops will have the entire history of the project on their own hard drives.
It is often said that when working with Distributed Version Control Systems, you can’t have a single central repository. This is not true! Distributed Version Control Systems don’t prevent you from having a single “central” repository. They just provide you with more options.
Advantages of DVCS over CVCS:
- Because of local commits, the full history is always available
- No need to access a remote server (faster access)
- Ability to push your changes continuously
- Saves time, especially with SSH keys
- Good for projects with off-shore developers
Downsides of Distributed Version Control Systems:
- It may not always be obvious who did the most recent change
- File locking doesn’t allow different developers to work on the same piece of code simultaneously. It helps to avoid merge conflicts, but slows down development
- DVCS enables you to clone the repository – this could mean a security issue
- Managing non-mergeable files is contrary to the DVCS concept
- Working with a lot of binary files requires a huge amount of space, and developers can't do diffs