GIT is a distributed version management system created by Linus Torvalds to develop the Linux kernel. Git influenced the Bit Keeper project which was previously used to develop the Linux kernel and Monotone. Currently, GIT is widespread among known projects, it is used for the Linux kernel, X.Org or Ruby on Rails. The project is managed by Junio Haman and distributed under GPL version 2. It is an open source software.

GIT’s characteristics

The development of Git was inspired by the version control systems BitKeeper and Monotone. It was originally intended as a low-level tool to enable others to create a user interface like Cogito or StGIT. But the project core has subsequently grown into a complete system that manages revisions and is fully usable without additional tools.

Git was originally designed for the Linux OS but is very easily transferable to other UN*X systems including BSD, Solaris or Darwin and is also implemented for Windows. There is also a reimplementation of Jgit in Java and support in the form of a plug-in for Eclipse called EGit.

The system design benefited from the synthesis of the experience of Linus Torvalds who had experiences with the maintenance of a vast project, like the Linux core. It was also developed in a distributed, so in a collective manner and with a thorough knowledge of the file system and the need to create an usable tool as soon as possible. These effects thus led to the following consequences:

  • Powerful support for non-linear development: Git contains a support for rapid creation of greater and quick merging of these larger ones. It contains built-in graphic tools designed to visualise and navigate in a non-linear history of the project development. One of the key assumptions, essential for Git, is that changes are incorporated into other branches more often than they are created. This means that they pass through hands of many reviewers.
  • Distributed development. Like Darcs or BitKeeper, Git provides each developer with a local copy of the development entire history. Changes are then copied from one such repository to another. They are imported in the form of development branches that can be integrated into another branch as well as locally developed branches.
  • Working with major projects. Git is fast and scalable. Performance tests proved that Git is approximately 10 times faster than other tested systems and some operations were even about 100 times faster.
  • Cryptographic history authentication. History saving in Git is set so that the name of a specific revision, called “commit” in Git, depends on the overall development history that leads to this commit. Once published, old versions cannot be changed unnoticed.

The advantages of using GIT

  • Distributed model. The developer’s work is separated from others and can only be made available after a decision. Not everything has to be public. At the same time, the development is faster, because almost everything is launched locally and it is even possible to work offline.
  • Branching and linking branches. It is possible to simply work within different branches which are fast, consume little space and easily connect with other branches whenever needed. It is therefore possible to test each functionality in a separate environment while quickly connecting it to the main branch when it is ready.
  • Flexible workflow. It is possible to choose between a simple centralised workflow and any possible hierarchy.
  • Data integrity: Due to the use of SHA1 trees, data disruption is easily detectable for external reasons.

The disadvantages of using GIT

  • Hard to learn. GIT contains many commands with many options, some of which are not very intuitive and need an understanding of the GIT’s internal functionality, commands and arguments that aren’t always fully consistent.
  • Problems with binary files. If the project contains non-text files that are frequently updated, for example pictures for webpages or MS Office documents, GIT may be quite slow.