CSC/ECE 517 Fall 2010/ch1 1a mh

From Expertiza_Wiki
Revision as of 01:06, 8 September 2010 by Kmhuq (talk | contribs)
Jump to navigation Jump to search

Introduction

A version control system (VCS) is used to manage software codes,files and directory structures and corresponding updates made to them in a software development, web development etc. projects. Version control is also known as revision control, source control or software configuration management (SCM).

Any software coding project is a dynamic and fast paced environment. In a typical setting, code development for a project is performed simultaneously by many developers. Thus, incorporating all the changes made, either simultaneously or at different times, poses a new type of challenge.

This chapter focuses mainly on the development history of different version control systems.

Why version control systems are needed?

The major issues in a dynamic development environment can be described as:

  • Obviously, merging of a lot of files. If we consider somebody to do merging manually, The sheer volume of communication required is overwhelming. This communication can be among the developers themselves in a small team or between the team leader in charge of merging and the rest of the group.
  • Sandboxing / Branching: It is possible to make temporary code changes in an isolated area, usually in branch folder, for testing purpose. If the outcome is satisfactory then the code can be merged with the existing code, otherwise it can be discarded without having any impact on the main code.
  • Accountability: if one of the developer breaks the code during development, It is tough to detect and naturally nobody steps forward to take the blame. A version control system can precisely indicate who caused the break in the code.
  • If a certain code implementation doesn't work as expected, Reverting to last satisfactory state may be required.
  • Code loss due to development on stale code. for example, two developers downloaded a certain file at 10AM. One of the developers modified foo_1() method and uploaded modified file at 10:30AM.The other developer modified foo_2() method and uploaded the same file at 10:45AM. Since the functions are in the same file, the second upload will overwrite the file uploaded by first developer at 10:30AM causing loss of his part of work.
  • Even a lone coder might need to review why he made a certain change in code. Comments during code check-in can be a useful resource in such situation.
  • Version control provides a form of documentation which makes tracking easy. i.e.-tagging is a kind of snapshot of all files and documents at a particular stage of development, usually during a stable release. This allows the developers to work with the exact files that were included in that release for bug-fixing purpose.


Development phases of version control systems

VCS' can be broadly categorized into three groups based on the repository model. The sequence below follows the evolution of version control systems as well:

  1. Local model:Local version control systems had only one location for storage of the files.So, all the developers had to use same computer system.
    1. Source Code Control System (SCCS) is one of pioneer source code revision softwares. SCCS was developed at Bell Labs in 1972 by Marc J. Rochkind. Although it was originally developed for OS/MVT, SCCS was included in some UNIX distributions. SCCS ruled as the dominant VCS until Revision Control System was released.
    2. Revision Control System(RCS) automated storing, retrieval, logging, identification, and merging of revisions for text that is revised frequently. RCS was first released in 1982 by Walter F. Tichy as an alternative to SCCS. It quickly gained popularity and almost replaced SCCS.
    RCS gained in performance by storing the most recent copy of file and then storing only reverse differences called "deltas".
  2. Client-server model: The client-server model utilizes a single repository for the development.
    1. Concurrent Versions System (CVS) was one of the early client-server model based scheme. Dick Grune developed CVS from 1984-1985 to allow his students to code according to their schedule. CVS was publicly released at 1986.The main improvement for CVS over RCS was that CVS could manage the whole project while RCS could only work on a file at a time.At the beginning, CVS was script based with RCS running at background. Later it was developed into a full fledged program. A lot of the IDE's (Emacs, Eclipse/aptana,Netbeans, Komodo, PHPEdit etc.) support CVS.
      CVSNT is a cross platform port of CVS with some modification. OpenCVS puts more emphasis on security.
    2. CollabNet started developing Subversion (SVN) as a successor of CVS with added functionality. Different open source projects use Subversion. <ref> Subversion is open source due to it's Apache license.
    3. Some proprietary client-server based version control softwares are-
    • Autodesk Vault was specifically developed for Autodesk applications.
    • ClearCase was developed by IBM Rational Software. It's a Source Code Control (SCC) compliant software.
    • Visual SourceSafe is developed by Microsoft targeting small development team.
    • Visual Studio Team System is also developed by Microsoft targeting larger groups.
  3. Distributed model: Distributed Version Control (DVCS), or Decentralized Version Control is the latest addition in vesion control systems. In DVCS, there can be many central repository. Each developer works with his or her local repository and the changes are synchronized between repositories upon commit. DVCS are better suited for large teams with partially independent developers.
  4. Monotone and GNU arch were the first generation DVCS (release:2001-2003) followed by Darcs (stable release:2010).Mercurial , Git and Bazaar (2005-2007) are well adopted among developers.
  5. BitKeeper,[Code Co-op http://en.wikipedia.org/wiki/Code_Co-op], Sun WorkShop TeamWare are some proprietary DVCS softwares.

Linux based version control softwares

Most open source softwares have Linux distributions.

References

a collection of articles on source control and best practices

M. J. Rochkind: The Source Code Control System. In IEEE Transactions on Software Engineering SE-1:4 (Dec. 1975), pages 364–370.

Mike Mason; Pragmatic Version Control Using Subversion; Pragmatic Bookshelf; ISBN 0-9745140-6-3 (1st edition, paperback, 2005)

"Version Control with Subversion", an O'Reilly book available for free online

<ref> Apache Software Foundation,Ruby,SourceForge,Tigris.org, PHP, Python and MediaWiki</ref>

"Subversion becomes Apache Subversion". Apache Software Foundation.


External links

Wikipedia: Revision control

Wikipedia: List of revision control software

CVS

Dick Grune's website on CVS history

The original usenet post on CVS archived at google groups.