Pour lire la version française de cet article, cliquez ici.
This is the second part of an article on version control systems. Here, we discuss the strengths and weaknesses of various repository software, and where and how it is best used.
Comparisons of different repository software
Following up on the article on versioning, this article compares and analyses the following repository software:
-
CVSNT (Concurrent Version System)
-
Git
-
Mercurial
-
Rational Team Concert
-
Subversion
Each one will be looked at according to their:
-
Price (such as whether it is open-source, licensing, per-seat, per-core, or support contracts)
-
Environmental factors (hosted on a server or the cloud, the development language(s), and operating system
-
Advantages and disadvantages, and
-
Best-use scenarios, that is where the versioning system will actively help in the project.
A summary of repository software
CVSNT
A branch of CVS, this is an open-source versioning system first developed in 1986 and is considered to be the ancestor of other version control systems. It is widely used (your writer has used it for the development of automation software) and has been on the market long enough to be confident of its stability. The developers have implemented atomic commits and the system uses a SQL backend. However, this backend does not use the source files, but data about metrics and for audit purposes. CVSNT is also distributed with TortoiseCVS and WinCVS. Weaknesses are the continued dependence on flat files (which are more easily corrupted) and its handling of long branches.
Git
Probably the best-known version control system, created by Linus Torvalds (he called it “git” from the English slang word that means “unpleasant, silly, incompetent, annoying, or childish person”). It was primarily designed to speed and scale up patches and associated metadata for the Linux project. Git was also designed to avoid the pitfalls of CVS and integrate strong safeguards against data corruption. It succeeds well in these aims. The downsides are a steep learning curve for those moving from CVS, and limited Windows support. It is a popular tool with many offerings of the Git server, such as on the Cloud or a local server. Examples include GitHub, SourceForge, Bitbucket, and GitLab.
Mercurial
Developed to compete with Git for Linux kernel development. It is primarily implemented in the scripting language Python (most other version control systems are written in the programming language C). Though Mercurial shares some features with CVS, it is a fully distributed system; that is, it shares components and data across a range of machines while presenting itself as a unified system to its users. Mercurial is also relatively easy to learn and has excellent support documentation. However, it is not as easy to automate as Git and is less powerful without tuning.
Rational Team Concert
One of IBM Rational’s version control systems (others are ClearCase and Synergy). It has a clear set of templates and extensive reporting functions, which is useful for project management. It is very flexible, handles complex merges well, and has first-rate support. Drawbacks are an aging, clunky user interface and, for new users, there is a steep learning curve. Though the software is complex, there is a dedicated support team.
Subversion
Created as a tool that would fix some of the bugs in CVS whilst maintaining high-level compatibility with that software. It implements atomic operations to minimise the chances of data corruption. The extensive library of plug-ins increases its functionality and provides exemplary visibility for all changes. The software is very stable, conflict resolution is strong, and it is easily automated and integrated into an existing toolchain. However, performance is not good on Windows hosts (it is a lot faster on Linux) and there are some problems with file manipulation (sometimes requiring a two-step process).
Last word
Most of these tools require some level of oversight to ensure the best results and should be implemented using a solid framework such as Prince2 at the project management level and COBIT at the development level. It helps enormously to select a tool that meshes the best with the experience and culture of the development team.
Version management software is a keystone of development, ensuring fewer conflicts in merges, providing a valuable overview for the project managers, and speeding up the development process. As an essential part of the toolchain, they have different levels of integration by-product but most are sufficiently flexible to allow integration without too many problems.
Finally, it should be noted that the choice of tool is dependent on the needs and preferences of the development team, and there is no “one-size-fits-all” solution.
Further reading:
Version control system: a non-technical introduction by Andrew Clandillon
Continuous Integration: a non-technical introduction by Andrew Clandillon
Image:
Depositphotos