Version Control System: The origin

Search for a command to run...

No comments yet. Be the first to comment.
Imagine this: you're building a real-time trading platform. The data streams in, charts flicker, and numbers update every millisecond. The core of this experience is a high-frequency WebSocket connection. But despite your best efforts, there's a prob...

JavaScript is at the heart of modern web development, powering everything from massive, complex frameworks to enterprise-level Node.js services. While developers enjoy its flexibility, many don't know what happens at the system level to make their co...

Based on Job requirement analysis

If you've spent any time learning React.js, you've likely encountered the concept of state. It’s one of the framework's fundamental building blocks, but it often brings up a basic question: Why can't I just use a regular JavaScript variable? While a ...

That era was also known as the “copy-paste-rename” era. In the early 1980s and 90s, we evolved from punch cards to hard drives for code, but developers at that time didn’t have the tools to track it. They used to copy and rename folders for version management and share code with other developers via flash drives or emails. And this is where a new chaos began, which led to the birth of version control systems.
Without a proper tool to manage the versions of code either parts or a whole software the developers soon started to feel the problem of tracking versions. the codebase soon looked like:
feature.js
feature_v1.js
feature_backup_v1.js
feature_v2.js
This soon became a problem. The size was increasing unnecessarily, people don’t know the current version, they aren’t able to track changes, etc. These lead to frequent conflicts, software crashes, increased Time-to-market and hence increasing overall cost.
Without a proper version control system people are sharing code as a whole. Now suppose you are working on feature A and you’re teammate is working on feature B. Both of you modified a shared file like config or main file. Now when you both want to merge it to the main server you have your own two folders and don’t have a way to track changes. you have to go line by line and this will take a lot of time and effort. Also this will increase chances of human errors and if there are other team members as well they now have to sync the current code with their own versions via this same process.
Suppose someone changed a critical piece of code and you copied it without checking. you found the problem later but you can’t undo the changes to previous state as there is no previous state to fallback to. Even you find the previous code versions, in most cases you might not be able to tell which was the previous version used here and as developers we don’t like uncertainty for something critical.
Suppose someone from the team changed a shared piece of code and you copied it as it is. now you probably don’t know how, when, why and by whom that piece of code is changed. who is accountable for the changes. Or you found a new addition in the shared code and you want to find why and who added that until you will ask everyone manually who did this and why.
And the list goes on and on with more syncing or mismatching problems people faced at that time.
The solution evolved in three distinct generations, each trying to solve the bottlenecks of the previous one.
Tools: SCCS, RCS.
The initial attempt was the Locking Model. If Developer A "checks out" the file to edit it, Developer B cannot touch it. They have to wait until A unlocks it. It solved the "Overwrite Problem" (Version Hell). Two people couldn't destroy each other's work because only one could write at a time. But It created the "Waiting Line" issue. If you needed to edit critical_feature.js but your colleague had it locked and went to lunch, you were stuck. Development speed was strictly limited.
Tools: SVN
Next we moved to a Merge-Before-Commit model. In this, a central server held the "Truth". Developers checked out files, made changes, and tried to push them back. If someone else changed the file in meantime you need to download their version and merge it with yours. This solved Integration Hell. Multiple people could work on the same project simultaneously. But It introduced the Single Point of Failure. If the central server went down, no one could commit code, look at history, or revert changes. Nothing will work without an internet connection to the server.
Tools: Git
This is the modern standard (Decentralized VCS). Instead of just checking out the latest version of the code, every developer mirrors the entire repository (files, changes, and version history) locally on their machine. This finally solved the Accountability and Undo problems completely. Since developers have the whole history locally, they can commit changes or browse old versions locally. Operations are instant because they happen on local hard drive. If the main server dies, any developer's computer contains a full backup of the project history that can be restored immediately.
We went from renaming folders (final_v3.zip) to a system where every line of code has a git hash pointing to who wrote it and when.
| Era | The Logic Used |
| Gen 1 (SCCS) | Locking |
| Gen 2 (SVN) | Merging |
| Gen 3 (Git) | Distributed |