VERSION CONTROL SYSTEM IN NUTSHELL
Tags: git, devops
Published: 2024-01-27 07:50:56



## Introduction
Hello, fellow tech enthusiasts! Today, I want to delve into a topic that is integral to the world of software development - Version Control Systems (VCS), also known as Software Configuration Management or Source Control Management (SCM).

## 🚀 The Need for Version Control Systems
Imagine you're a developer working on a client project that contains 100 files. The client requests changes, and you dutifully make them. But then, the client wants to see the project as it was on Day 1. Without a VCS, you'd be helpless, as you didn't save or manage the code as it was on Day 1. This is why we shouldn't overwrite our code. In large organizations, where many developers are working on the same project, maintaining different versions of the project or task manually can be challenging. This is where VCS comes in.

## 💡 Who Uses Version Control Systems and Why?
It's not just developers who use VCS. Testers use it to manage their test scripts, architects to manage their design patterns in document forms, and project managers to manage their Excel sheets, among others.

## 🤝 How Version Control Systems Work
The working directory or workspace is where developers keep their files. It has nothing to do with version control. The repository is where we keep files along with their metadata. Here, version control is applicable. The client program, such as Git, is responsible for transferring files from the working directory to the repository and vice versa. The process of sending files from the working directory to the repository is called a commit, and each commit has a unique id, the commit id. The process of transferring files from the repository to the working directory is called checkout, sometimes referred to as pull or clone.

## 📖 The Benefits of Version Control Systems
VCS offers numerous benefits. We can maintain different versions of a file and choose any version as per our requirement. We can maintain metadata like the commit message, who made a commit, when a commit was made, and what changes have been made. It allows us to share code with different developers and collaborate, enabling parallel development. It also provides access control, determining who can read data and who can modify code.

## 🌟 Types of Version Control Systems
There are three types of VCS:

### Local Version Control System
In a Local Version Control System, all the files are kept in different drives or locations. This makes it difficult to remember the exact location of the file, and if the file is deleted, the whole progress will be lost. This system is simple and easy to use, but it lacks the collaboration feature, which is crucial in a team environment.

### Centralized Version Control System
In a Centralized Version Control System, there is a central repository where all files and their versions are saved. This allows different developers to contribute using a single repository. The process of taking code from the central repository to the local machine is called 'checkout', and the process of sending the code from the local machine to the central repository is called 'push'. However, this system has a single point of failure. If the central repository fails, the entire project history might be lost. Also, network connectivity should be available every time for operations.

### Distributed Version Control System
In a Distributed Version Control System, every developer has their own local repository. They can commit or update the code in their local repository, and all users would be connected to a centralized remote repository in which they will push or pull the code. This means the version of the files or folders would be present in both the developers' repository and the central remote repository.

## Conclusion
As I reflect on the importance of Version Control Systems, I'm filled with gratitude for the ease and efficiency they bring to our work as developers. They're the catalysts for effective collaboration and version management, reminding us that we're never alone on our coding journeys. So, until the next blog post, let's continue to learn, connect, and grow together. 🚀💫