Let us dig a little deeper into these questions and see how version control in DevOps makes a big difference in the software development process.
Who made what change?
Who made what change? – each developer that works with the same codebase in a collaborative environment adding new lines, deleting existing, rewriting/refactoring codes according to his task (it can be a bug reported he has fixed or a new feature). So, it is important to be able to identify the author of each change in the codes and be able to tell at what point in time this change was made.
Why would we want to know it? Well, let us move on to the next questions and it will become clear.
Why did this developer make these changes? Were they related to an issue ticket or was it a planned feature? Knowing the time and the reason why these changes were made we could understand and make a decision how they affected the solution.
So basically, now we have a set of problem statements why we need a tool for tracking the development results, and we can shape out some specific requirements to this tool:
- Provide ability for multiple users to access source codes and change them
- Show the difference between code revisions (current and previous versions of files)
- Be able to accept or reject changes
- Have ability to restore state of codebase to a particular timestamp in the past
- Control access rights – define who can do what
All these capabilities are provided by a specific type of software – Version Control Systems (VCS), part of a Software Configuration Management (SCM) class of systems. It is also an integral building block of Continuous Integration (CI) toolset which makes it necessary for any DevOps engineer to be familiar with such type of software and be able to configure and use it.
In fact, VCS has a broader area of application than just tracking of programming source codes – any type of files can be tracked in such systems. From DevOps perspective, it is also common to manage configuration files in such repositories, but it can be any artifacts that you would like to track versions that have all the above-mentioned features, for example, documentation for a software project.