Version Control for Beginners (or how this stuff has saved developers from the "now it goes" archives!)
Tags: git, github, bitbucket
Published: 2021-08-22 20:18:20

## A short introduction to how it was to me before the discover of Version Control Softwares

I am going to explain in a simply way the reality of some of us in a period of our lives. In this short introduction I will try to guide and to locate you in order you to figure out what was my context, but initialy the year I will give here has no relation with year of creation or no creation of specific Version Control Software (even because, Version Control Systems date from years far away from you may imagine, as we are going to see further). The year was 1995, year of the creation of great programming languages such as javaScript, creation of legendary Operations Systems such as Windows 95, creation of great companies such as Amazon, Accruent among others. But I had big problems to solve concerning on how would I could control the versions of the school's project the teachers always proposed us doing in a team of students, and it was always that mess of archives in the Personnal Computer of each one. Then suddely someone which has noticed the issue always came with the perfect solution, he or she was named the last archive with the very last version as something like `homework_nowitgoes.doc`. Does it ring a bell for you in any moment of your life?

## History of Version Control System

![Git logo](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/irr32gu2x2umyq7zyldb.png)

Ok, I know the above image isn't the only one Version Control System existing in the world, but it's undeniable that it's the most popular nowadays.

Before the emergence of Git, we had others VCS's as powerful as Git, or not so powerful but it was because the usability of the systems in the period of each software has been created has been limited by the concept, for example the first generation was centralized and the third generation is decentralized. In the next image you may check the years of creation and the name of these others Version Control Systems, as well as the people or companies which have created them (source of image: [The Evolution Of Version Control System (VCS) Internals](https://initialcommit.com/blog/Technical-Guide-VCS-Internals)):

![Timeline Creation VCS](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ccd8gya95c5m4kt1egrt.png)

I will not enter in the details of each Version Control System, for this it already exists a very good article which is the same from where I've extracted the above image [here](https://initialcommit.com/blog/Technical-Guide-VCS-Internals), but basicaly we have the following order:

> 1. SCCS (Source Code Control System - First Generation)
2. RCS (Revision Control System - First Generation)
3. CVS (Concurrent Versions System - Second Generation)
4. SVN (Apache Subversion - Second Generation)
5. Perforce Helix Core (Second Generation)
6. Git (Third Generation)
7. Mercurial (Third Generation)
8. BitKeeper (Third Generation)
9. Darcs (Darcs Advanced Revision Control System - Third Generation)
10. Monotone (Third Generation)
11. Bazaar (Third Generation)
12. Fossil (Third Generation)
13. Pijul (Third Generation)

## GitHub and Bitbucket

Before discuss the objective of this session, which is analyse the differences between the GitHub and Bitbucket (two hosting services for software developing and version control), it's important to note that, although the name of both are pretty closer, Git isn't the same thing of GitHub. Git is the software which permits the users doing the control of their project's version and GitHub is the place, the repository host that a team of developers, for example, can maintain every version of a project and each developer may work localy with any of these versions, send to the repository, merge the versions, create new branches and so on. Similar to the Version Control Softwares, there are many other repository hosts beyond GitHub, but the two most popular are GitHub, which is used majoritary for opensource projects and Bitbucket, which is used majoritary for great software corporations. You can read a good and funny article comparing both [here](https://blog.geekhunter.com.br/bitbucket-vs-git-quem-vence-a-batalha/).

## Why everyone uses a VCS?

Advantages to use a VCS:
1. To do the rollback not only of a code, but an entire repository
2. To have a single source of truth of the code
3. To facilitate team development
4. To track project modifications
5. To use boilerplates in a project

## Why should I use Git?

Advantages to use Git:
1. Decentralized: Git is fast, all operations are performed locally, different from centralized systems
2. Branch based: frictionless context switching, create a branch to try out an idea, commit few times, switch back to where you branched from.
3. Security: cryptographic integrity of every bit of your project.
4. Staging area: intermediate area where commits can be edited before completing the commits.

There is a very good article which treats about what we have discussed in this session: [What is Git? What benefits does Git offer?](https://guide.quickscrum.com/git-guide/)

## Conclusion

You have notice that the discussion of the use of Version Control Softwares are very extensive and this article has just shown a short part of it, but to sum up if you are looking for the good pratices inside software development companies and for any other kind of activity that needs to have a very efficient control of the version of the technical documents, it is very useful to learn about the different Version Control Softwares along the History and also too much important to learn about Git.