Keeping track of code changes – what has changed, by whom and when – is absolutely necessary for quality assurance and to ensure the software behaves as expected and delivers the correct results. Tools to assist developers in this task have been around for a very long time, for instance Microsoft Visual SourceSafe which is now discontinued although still being maintained. Other examples include the free Apache Subversion and Mercurial tools.
Modern version control systems make use of a repository to hold the source code and its variants. In it’s most basic form this could be a shared folder although a client server or distributed model is more usual.
Git is one of the most widely adopted solutions that uses repos. It was developed by Linus Torvolds in 2005 for the development of the Linux kernel.
Unlike the client server model, Git adopts a distributed approach which enables each Git directory on every computer to be a full-fledged repository with complete history and full version tracking capabilities, independent of network access or central server. You can clone the entire repository without having to checkout of the current source code tip. Unless there is only a single copy of the repository, Git doesn’t have a single point of failure. Even with a centralised workflow, every user essentially has a full backup of the main server and any of these can be pushed up to replace the main server in the event of a crash or corruption. An almost endless number of workflows can be implemented on account of Git’s distributed nature and branching system.
For more information, see the Git website.
When version control isn’t enough
Tracking changes to the code is only part of the story however. The need to manage development teams and allow them to collaborate on projects has been a driving force behind a breed of dev solutions such as Microsoft Visual Studio Team Systems, MicroFocus StarTeam and the various components that are part of IBM’s Rational product set.
The increased velocity of Agile and CI/CD projects together with the greater number of remote participants has raised the need for comprehensive Software Configuration Management (SCM) products and services.
The challenges these seek to address extend beyond version control to include a broader spectrum of things that concern development projects such as task assignment, scheduling, what if scenarios etc. A major consumer for this is the open source community and it isn’t surprising that open source has played a significant role in developing the tools needed for the job such as GitHub.
Owned by Microsoft since 2018, GitHub is an hosted environment for version control and source code management using Git. It also provides access control and collaboration features such as bug tracking, feature requests, task management and wikis for every project.
GitHub is a key part of Microsoft’s open source story and I will be writing a follow-up blog to delve deeper into this next time.