CSC/ECE 517 Fall 2009/wiki1a 5 a2

From Expertiza_Wiki
Jump to navigation Jump to search

History of Version Control

Version Control (also called Revision Control, Source Code Control) is a category of software whose purpose is to manage changes to digital information in an automated way. Digital information, in this context could be source code of computer programs, design database or any other piece of work stored electronically. Before the advent of electronic storage, a hard copy (such as on paper) was automatically granted as preserved. With storage getting shifted on to electronic media, it became both - possible and a necessity to have software which could keep track of changes to the information stored.

Today, with development project typically spanning multiple geographical sites and people with different time schedules, Version Control program have become a necessity. A brief look at the earlier generations of Version Control Software.


Source Code Control System (SCCS)

One of the earliest revision control software, Source Code Control System (SCCS) was developed at Bell Labs in 1972 by Marc Rochkind. Though initially written for IBM System/370 computer, it was later re-written for UNIX and subsequently included in several UNIX distributions. SCCS remained the dominant version control system until Revision Control System (RCS) was released. Today, SCCS is considered obsolete; the file format of SCCS is still used by some revision control programs like BitKeeper and TeamWare.

Revion Control System (RCS)

Revion Control System (RCS) was developed by Walter F. Tichy in the 1980s while he was at the Purdue University. RCS was an improvement when compared to SCCS. It had a better user interface and the method of storage resulted in faster retrieval. It stored the most recent file in entirety. The earlier revisions of the file was stored as reverse differences. This feature made it operate faster than SCCS. RCS was made freely available. It quickly dislodged SCCS from its dominant position and became part of the GNU Project. Last maintenance on RCS was in 1995.

RCS (Command) Usage Examples:

The typical steps of using RCS is quite short and can be summarized as follows:

-- # Navigate to the working directory #

-- cd /path/to/working_directory

-- # Check file out and lock #

-- co -l samplefile

-- # Work on this samplefile using editor of choice #

-- # To see what has changed in the latest version #

-- rcsdiff samplefile

-- # Check in the new version of the file #

-- ci -u samplefile


Limitations of RCS:

- It could only work on single files, not on on project or hierarchies(directories).

- At any given time, only one person could edit a file .

- It was not possible to group together files.

- RCS directory had to be local.

Concurrent Version System (CVS)

Dick Grune of Vrije University, Amsterdam created Concurrent Version System CVS. He created it so that he could cooperate with two of his students while working on ACK (Amsterdam Compiler Kit) C compiler [1]. CVS used the Client-Server architecture where the server was used as the repository. CVS could handle multiple people working on a set of files simultaneously without resulting in any conflicts. The server was used to store the current version of the project. When someone wants to modify one or more files, he has to check it out, modify and then check-in. The server stored all the relevant information, like revision history, revisions of projects/files, historical snapshot of the project etc. Clients can request these information as needed. Typically, the client and server communicate over LAN or internet. However, this is not a necessity as the client and server could be hosted on the same machine. CVS was initally created calling RCS programs. This was later changed as further refinement. More on CVS can be found in [2].

CVS (Command) Usage Examples:

The typical steps of using CVS can be summarized as follows:

1. Create a Repository

cvs -d ~/cvsroot init

2. Add a Project

cvs import -m "dir structure" cvs_example

3. Check out a Project

cvs checkout cvs_example

Directory called cvs_example should have a subdirectory called CVS.

4. Adding files

cvs add sample.tex

cvs commit -m "original files" *.tex

CVS commit adds the file permanently.

5. Updating the Working Directory Update is an important CVS command. It updates the working directory from the repository, but also tells the status of files.

cvs update

To see what has changed in a file, use cvs diff:

cvs diff sample.tex


Limitations of CVS:

- A commit was not an atomic operation.

- File(s) or directory renaming is not version controlled.

- Handling binary files is (processor/bandwidth) expensive.

- Cost is proportional to data size.

Subversion (SVN)

Subversion(SVN)is a version control software introduced in 2000. It is the outcome of an effort to develop an open source version control system to succeed CVS by adding the missing features (in CVS) and fixing the bugs. Subversion is released under the Apache License, making it open source. SVN has become quite popular and has been adopted in the corporate world as well. More on SVN can be found in [3].

SVN (Command) Usage Examples:

The typical steps of using CVS can be summarized as follows:

1. Create a Repository

svnadmin create d:/path_to_repository

2. Add a New Project

svn import project file:///d:/repository_name/project -m "Initial Import"

3. Checking Out a Project

svn checkout file:///d:/repository_name/project/trunk project

4. Adding New Files and Directories

svn add file_or_dir_name

5. Committing Changes

svn commit

6. Updating Your Local Files

svn update


Academic Papers Related to Version Control

1. Marc J. Rochkind. “The Source Code Control System”. 364-370. IEEE Transactions on Software Engineering. SE-1. 4. Dec 1975.

2. Walter F. Tichy. ““Design, Implementation, and Evaluation of a Revision Control System””. 58-67. Proceedings of the 6th International Conference on Software Engineering. ACM. IEEE. IPS. NBS. . September 1982.

3. Stuart I. Feldman. 255-265. “Make—A Program for Maintaining Computer Programs”. Software—Practice & Experience. 9. 3. March 1979.

4. James W. Hunt and M. D. McIlroy. “An Algorithm for Differential File Comparison”. 41st Computing Science Technical Report. Bell Laboratories. June 1976.

5. Alan L. Glasser. ““The Evolution of a Source Code Control System””. 122-125. Software Engineering Notes,. 3. 5. Nov. 1978. Proceedings of the Software Quality and Assurance Workshop.

6. A. Nico Habermann. A Software Development Control System. Technical Report. Carnegie-Mellon University, Department of Computer Science. Jan. 1979.

7. Walter F. Tichy. ““A Data Model for Programming Support Environments and its Application””. Automated Tools for Information System Design and Development. Hans-Jochen Schneider. Anthony I. Wasserman. North-Holland Publishing Company. Amsterdam. 1982.

8. Walter F. Tichy. “The String-to-String Correction Problem with Block Moves”. ACM Transactions on Computer Systems. 2. 4. 309-321. Nov. 1984.

References

[1] Dick Grune on CVS

[2] CVS

[3] SVN

External Links

RCS Commands

RCS on GNU

CVS Commands

SVN Commands

Visual Guide to Version Control

CVS on Web

CVS-SVN Tutorial