Version Control is a collection of software functionality which are supporting the work of a software developer in professional environment. This article describes the theory of Version Control. And, what was this “Git”?
Version Control (or SCM = Software Configuration Management in wider terms) is a model to define functionality, which is necessary to make it possible for several contributors to work in the same collection of data (for example: source code). It has been created with the background of distributed development and the problems which raise upon this approach. Using Version Control it is possible to track changes in source code and assign the change to a contributor.
The Version Control capabilities of the classic NAV Development environment are very poor. The only breeze of Version Control was the “Lock Object”-function. Handling different versions of source code was a nightmare especially when it was necessary to track down an undocumented change.
To cope with requirements of modern, distributed team-orientated software development, Version Control consist mainly of the following sub-items:
A repository is a set of information (metadata) which describes the on-disk data structure. Another part of a repository is a record of the history changes.
A branch is a duplication of an object managed in a repository. By creating a branch it is possible to work in encapsulated source code without harming the original code. A practical application could be to create a branch of the source code used in a production environment to develop new functionality or track down bugs.
When code is changed and saved, VSCode will collect these files to be reviewed before merge into the branch.
A merge will become necessary when source code from two different versions must be combined. For example, when changes from a development-branch must be integrated into the production-branch it is necessary to review the changes in the staging area and merge them into a combined version. By the way: VSCode contains a Merge-Window out-of-the-box.
When all changes are merged into a combined version, it is necessary to “seal” the changes into a final version which will be available for everyone. Normally, as part of a commit, it is necessary to define a meaningful description of the changes which have been done in the source code.
So, what is Git and what is the difference to Github?
Git is a free and open source Version Control-system designed to provide a foundation for teams working in a distributed project. Git is one of the most popular tools and it contains the basic requirements of modern Version Control. It is possible to track modifications in source code, compare and merge changes, move between different source code versions (for example: Production-, Test- and Development-source code) and create private copies easily. Fortunate, with the AL-extension of VSCode the well known Objects are organized in files and therefore the merge of a Page will finally become easy. Git itself is a command line tool originally, but it comes with a simple build-in GUI. (It is possible to install a different GUI from here.)
The popular website Github is a hosting service which utilizes Git and adds additional services like access control, bug tracking, feature requests, task management and wikis. With this functional addition, Github is a competitor to Microsoft Visual Studio Team Services.
By the way: VSCode wouldn’t be VSCode when it wouldn’t be possible to install other SCM-extensions (and to use all at the same time).