CSC/ECE 517 Fall 2009/wiki1a 5 a2: Difference between revisions
No edit summary |
No edit summary |
||
(30 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
== History of Version Control == | == 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. | [http://en.wikipedia.org/wiki/Revision_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. | 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 [http://en.wikipedia.org/wiki/Bell_Labs Bell Labs] in 1972 by Marc Rochkind. Though initially written for [http://en.wikipedia.org/wiki/System/370 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 [http://en.wikipedia.org/wiki/BitKeeper BitKeeper] and [http://en.wikipedia.org/wiki/TeamWare TeamWare]. | One of the earliest revision control software, Source Code Control System ([http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS]) was developed at [http://en.wikipedia.org/wiki/Bell_Labs Bell Labs] in 1972 by Marc Rochkind. Though initially written for [http://en.wikipedia.org/wiki/System/370 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 [http://en.wikipedia.org/wiki/BitKeeper BitKeeper] and [http://en.wikipedia.org/wiki/TeamWare TeamWare]. | ||
=== Revion Control System (RCS) === | |||
Revion Control System (RCS) was developed by [http://www.ipd.uka.de/~tichy/ 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. | Revion Control System ([http://www.gnu.org/software/rcs/ RCS]) was developed by [http://www.ipd.uka.de/~tichy/ 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). | - It could only work on single files, not on on project or hierarchies(directories). | ||
Line 24: | Line 46: | ||
- RCS directory had to be local. | - RCS directory had to be local. | ||
=== Concurrent Version System (CVS) === | |||
[http://www.cs.vu.nl/~dick/ Dick Grune] of Vrije University, Amsterdam created Concurrent Version System [http://www.nongnu.org/cvs/ CVS]. He created it so that he could cooperate with two of his students while working on ACK ([http://tack.sourceforge.net/ 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 [http://en.wikipedia.org/wiki/Atomicity_%28database_systems%29 atomic operation]. | - A commit was not an [http://en.wikipedia.org/wiki/Atomicity_%28database_systems%29 atomic operation]. | ||
Line 39: | Line 95: | ||
- Cost is proportional to data size. | - Cost is proportional to data size. | ||
=== Subversion (SVN) === | |||
Subversion([http://en.wikipedia.org/wiki/Subversion_%28software%29 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 [http://en.wikipedia.org/wiki/Apache_License 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. | 1. Marc J. Rochkind. “The Source Code Control System”. 364-370. IEEE Transactions on Software Engineering. SE-1. 4. Dec 1975. | ||
Line 62: | Line 145: | ||
8. Walter F. Tichy. “The String-to-String Correction Problem with Block Moves”. ACM Transactions on Computer Systems. 2. 4. 309-321. Nov. 1984. | 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] http://www.cs.vu.nl/~dick/CVS.html#Books | [1] [http://www.cs.vu.nl/~dick/CVS.html#Books Dick Grune on CVS] | ||
[2] http://en.wikipedia.org/wiki/Concurrent_Versions_System | [2] [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] | ||
[3] http://en.wikipedia.org/wiki/Subversion_%28software%29 | [3] [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN] | ||
== External Links == | |||
[http://agave.garden.org/~aaronh/rcs/manual/peter_ware-1987/rcs_3.html RCS Commands] | [http://agave.garden.org/~aaronh/rcs/manual/peter_ware-1987/rcs_3.html RCS Commands] |
Latest revision as of 02:50, 17 September 2009
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
[2] CVS
[3] SVN