Penguin
Note: You are viewing an old revision of this page. View the current version.

A system which tracks versions, usually of SourceCode, but potentially any digital content. It allows multiple people to work on a project, automatically coordinating everyone's changes with everyone else's — much like the wiki. Having a project versioned makes it possible to roll back erroneous changes, find out when bugs or errors were introduced and by whom, maintain multiple branches of the same thing simultaneously without conflicts, and many things more. Different VersionControlSystems have different sets of features in terms of multiple file handling, MetaData versioning, distributed storage, security goals, etc.

Popular VersionControlSystems include

See EricRaymond's essay Understanding Version Control for an introduction to the main concepts and a comparison of the major systems. The main stages of development can be summarized as follows:

  • The very earliest systems were centralized. Not only that, but they required users to check out files specifically for writing before they were allowed to be changed. This was to prevent multiple users from modifying the same file at the same time, which was thought to lead to chaos.
  • This one-writer-at-a-time restriction turned out to be a lot more trouble than it was worth. Later systems (CVS, Subversion) dispensed with locking. Instead, when one user tried to check in a set of changes, and someone else had modified files (whether the same or different ones) since the first user did their checkout, the first user would be blocked from doing the checkin until they had manually incorporated those changes that had been checked in in the meantime.
  • Even later, clever techniques were invented to handle merging of overlapped changes. This was immensely liberating, by allowing parallel development, in a more collaborative way than before. The natural step from this was the evolution of DistributedVersionControlSystems. From this point on, the evolution of VCSes has basically been about developing increasingly sophisticated architectures for handling merging.

Each development took a long time, much of which was spent simply coming to recognize that there was a problem that needed to be solved. Many of the new developments remained controversial to adherents of older ways of doing things, even to the present day.


CategoryVersionControl