Version Control

Version control, a.k.a. source control is a system that manages changes to files in a project over time. Version control systems (VCS) are either:

  • Centralized Version Control Systems (CVCS) 🏭: a central server keeps track of every change (ex: SVN).

  • Distributed Version Control Systems (DVCS) 🏠: each user can keep track of every change (ex: GIT, Mercurial).

It's quite common in software development, especially GIT.

VCS addresses several challenges that arise when working on software development:

  • Tracking Changes πŸ”Ž: who made a change? when? why?...
  • Collaboration 🌍: handle problems when multiple people work on the same file. Also handle problems when a copy of the project was made to test something, and we need to "merge" it.
  • Backup and Recovery 😡: if something goes wrong, such as a file or some code being deleted, we can revert these changes.
  • ...

Versioning 🌞

Given the implementation of version control, the importance of proper versioning has significantly increased.

The commonly adopted approach for assigning version names to projects is known as Semantic Versioning.

  • πŸ—’οΈ The format is MAJOR.MINOR.PATCH
    • MAJOR: breaking change (of the API)
    • MINOR: non-breaking change, backward compatible
    • PATCH: internal change
  • When MAJOR = 0: in development
  • When MAJOR β‰₯ 1: Stable

An alternative is Calendar Versioning.

πŸ‘» To-do πŸ‘»

Stuff that I found, but never read/used yet.

  • Plastic SCM