Version Control 101: Here’s What You Need to Know
Have you ever accidentally written over a file and forgotten to save your previous version? Or made permanent changes to a project that you instantly regret? You’re not alone, and there is a solution. Enter version control.
You may have heard the term pop up in a meeting, or perhaps you’re working on a project that uses version control in some capacity. If it wasn’t automatically apparent to you what version control is and why it’s important, that’s ok — you’ve come to the right place.
This article covers the basics of version control, including what it really is and why it’s important.
What is version control anyway?
Version control (also known as source control) is a system or class of systems that keep a “version” of the file that you worked on before making modifications. That way, you can revisit that version later down the line.
Basically, it serves as a sort of audit trail, allowing you to revert something as small as a file or as large as a whole project back to its previous state. It lets teams — usually software teams — see who last modified something, compare changes across different versions, or discover when an issue was introduced in the code.
Version control allows software developers to work on a project in parallel, providing a single source of truth on the latest modifications to code so there’s no time wasted backtracking or wondering where things are at. Using a version control system also allows teams to do something called “branch and merge.” What does this mean? Well, creating a “branch” in a version control system “keeps multiple streams of work independent from each other while also providing the facility to merge that work back together, enabling developers to verify that the changes on each brand do not conflict.”
Basically, version control is a no-brainer for software teams.
The difference between centralized vs. distributed version control
There are two main types of version control systems (VSC): centralized and distributed. What’s the difference?
Centralized version control
In centralized version control, all versions of a piece of software or code are saved in a remote repository. This means there’s one central copy of the project and all changes are made in this remote, central system.
The learning curve to set up and use a centralized version control system is low, so the whole team, regardless of their seniority, can typically jump in and start making an impact right away without much training. While it’s a simpler system to use, the pitfall is that if the remote system goes down, no one can work on the project.
Distributed version control
Distributed version control saves versions in both the remote repository and local one. Each developer clones a copy of the repository and has the entire history of the project on their own hard drive. The benefit of this is that you don’t need to be connected to the server all the time. It’s considered to be the faster and more modern choice. However, it’s also more complex to learn and use. There are many commands for operations to remember, so it would take longer for team members of different capacities to get up to speed. But, it might be worth it in the long run, if even just for the flexibility to work offline.
4 key benefits of version control
For software teams, the source code is the life force of their project. Version control is what protects the source code from human error or unexpected (yet always possible) technological mishaps. Let’s look at some of the other key benefits of version control for software teams
1. Traceability: the ability to quickly uncover and restore old versions
Unhappy with the recent set of changes you made? With version control systems you can restore an old version, or even the whole project, with a few simple clicks. This gives software teams the ability to make significant changes to source code without worrying that they’ll damage the original software.
2. A clear understanding of what happened (or what went wrong) during a project
When you use version control software, you gain golden insight into what has happened at every point in the project, including where things might have gone wrong. Being able to quickly and accurately pinpoint mistakes can lead to faster fixes and solid learnings for the team as they continue working on the project.
Moreover, when you use VCS, you’re required to annotate your changes from one version to another. These notes can later be used to track a project’s evolution through time.
3. Better collaboration and communication
When you work with a version control system (be it centralized or distributed), anyone on your team can work on any file at any given moment. The system allows you to merge all the changes you made into a common version, so there’s never any doubt as to where the file’s at, if it’s safe to go in and make changes, or what the latest version of the project is. This helps improve collaboration and communication all around, which ultimately increases the team’s efficiency and output.
4. Greater ability to test and take risks
The ability to easily revert to an earlier version of a project allows teams to take greater risks, coding in new features they want to test without the anxiety of making a negative impact on the project. Having this mental space free inspires teams to do better work, even innovate.
5. The sky’s the limit for the number of branches you can create
There are no limits to the number of branches you can create in version control, and any conflicts that do happen to arise between the branch and the root project are typically swiftly resolved during the merging process.
The most popular version control software
After learning about the benefits of version control, you might be wondering how to get started with a version control system or which one is right for you. Let’s go over some of the top software and why each is unique.
GitHub, a child company of Microsoft, is a free and open-source distributed VSC (meaning it works with a remote repository) fit for projects of all sizes. The feature that it is most prominently known for is its branching model, encouraging multiple local branches that can work independently of one another. GitHub was the first version control platform; it launched in 2008. That gives it a headstart on its competitors, though the gap between them closes year after year.
GitLab is also a distributed web-based repository that helps with source code management. It markets itself as a “complete DevOps platform delivered as a single application”. One of the main differences between GitLab and other software is that GitLab is open-source. That means anyone can customize it to their needs.
Another VCS, BitBucket is a git-based source code repository under the Atlassian umbrella. Like GitHub, Bitbucket supports distributed version control. The company posits itself to be more than just Git code management, offering teams a central place to “plan projects, collaborate on code, test and deploy.” Because it’s part of Atlassian’s suite of software, BitBucket has a powerful native integration with [Jira], a project management tool that’s frequently used by software teams.
Summing up version control
While it’s definitely possible to build software without version control software, platforms like GitHub and BitBucket make development work faster, more efficient, and less prone to costly errors. By separating work on new features from the original copy of a piece of software, developers can do more with less risk. Sounds like a win-win.