Software Version Control

Version control in software is one vital aspect in great software development. It is a tool for developer to control the development from the aspect of time, allowing developers working together building a powerful products with asynchronous synchronization.

Controlling the Aspect Of Time

At any given point, be it prototype proof-of-concept, built a feature, etc., every developer would want to "freeze" that particular time and then proceed to further develop the product. By freezing that time point, it works as a checkpoint. Remember, a developer's job is to wander the world of randomness with his/her algorithmic prediction, not knowing the outcome can be good or bad.

Travel back in Time

With each checkpoint, a developer can have the ability to travel back in time to the last known working state. Hence, it gives a form of "assurance" that his/her existing exploration will not be thrown out in vain. These frozen time checkpoint allows them to restore to that last confident state instead of starting everything from scratch.

Tracking History

Time can be viewed in various perspectives. All the above was viewing from the "future" perspectives. If we view from the "past" perspectives, software version control allows us to track development metadata and metrics like listing the project contributors at code contribution level, when the contribution occurs, authenticity of the contributions, code fragments, etc.

A Kind of Time Travel Backup Solution

Hence, if we look at both perspectives, you can see that version control is some form of backup solution.

Project Snapshot vs. Access Control

There are 2 ways of performing version controls: snapshot the entire project like how we take photograph or perform access control by individual files. There are different tools for different approaches. Also, each of them has their pros and cons.

As for when to use: it's totally depending on use cases. However, project snapshot is currently the preferred model since they facilitate concurrent modification and requires no access server to operate. Feel free to explore some that I known of.

Access Control

Also known as component access locking. Each developers locks a certain amount of files for his/her modification while restricting others from doing it until the developer releases it.

You need a centralized server to manage all the access management.

Example supported software are:

  • cvn
  • svn

Project Snapshot

"Photograph" the entire project at a given time. Each developers submit the changes by sending small "snapshot" known as "a patch" containing the changes and patch onto it to proceed the timeline.

There will be conflicts between these patches when multiple developers submitting changes over the same section of the project.

Example supported software are:

  • git
  • git-lfg
  • quilt

That's all about software version control.