History of version-control systems (Wiki textbook Team4)

From Expertiza_Wiki
Revision as of 19:56, 6 September 2010 by Marashid (talk | contribs)
Jump to navigation Jump to search

"A source code system is a giant UNDO key-a project-wide time machine" -Andy Hunt and Dave Thomas

Introduction

Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are released even today. Briefly, VCSs can be categorized into four [1]:

  1. File versioning tools, examples: SCCS, RCS
  2. Tree versioning Tools-central style, example: CVS
  3. Tree versioning tools-central style, example: Subversion
  4. Tree versioning tool-distributed style, example Bazaar


Source Code Control System

The very first version control system[5] is the Source Code Control System, which was originally written by Marc J. Rochkind in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]


Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.


Revision Control System

Revision Control System[7] is the successor to SCCS and written by Walter F. Tichy (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:

  • Retrieve mainline revision 100
  • Retrieve and apply reverse deltas from 99 down to 10
  • Retrieve and apply 80 forward deltas on the branch


Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&T SCCS, and CMU Software Development control system.

Concurrent Version System

CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells.

CVS offers the following significant advantages over RCS:

  • It can run scripts which you can supply to log CVS operations or enforce site-specific polices.
  • CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files.
  • It can merge changes from non-CVS vendor branches.
  • Allows more than one developer to work on the same file at the same time
  • CVS servers run on most OS including unix-variants, Windows and OS/2 etc


SVN

Bazaar

Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in many terms.

Summary

Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]

References

[1] Bazaar v2.1 Documentation

[2] A Brief History of VCS

[3] SCCS - The POSIX Source Code Control System

[4] The Source Code Control System by Marc J. Rochkind

[5] Source Code Control Systems

[6] Tichy, Walter RCS-A system for Version Control

[7] Revision control System

[8] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)