<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Afouzda</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Afouzda"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Afouzda"/>
	<updated>2026-07-13T07:13:52Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=29785</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 7 Single Choice Pattern am</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=29785"/>
		<updated>2009-11-20T00:31:43Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_17_am&amp;diff=29784</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 17 am</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_17_am&amp;diff=29784"/>
		<updated>2009-11-20T00:30:41Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Single Choice Principle'''==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Single Choice Principle states that whenever a software system must support a set of alternatives, one and only one module in the system should know their exhaustive list. It is one of the five principles of software construction as stated by Bertrand Meyer, the other four being the [http://hebb.cis.uoguelph.ca/~dave/343/Lectures/swquality.html#linguistic Linguistic Modular Units Principle], the Self- Documentation Principle, the [http://en.wikipedia.org/wiki/Uniform_access_principle Uniform- Access Principle], and the [http://en.wikipedia.org/wiki/Open/closed_principle Open- Closed Principle]. The Single Choice Principle may be viewed as a consequence of both the Open-Closed and information Hiding rules. It was applied when designing [http://en.wikipedia.org/wiki/Eiffel_%28programming_language%29 Eiffel].This principle is a particular case of the [http://en.wikipedia.org/wiki/Don%27t_repeat_yourself Don't repeat yourself principle].&lt;br /&gt;
&lt;br /&gt;
===Violation of SCP===&lt;br /&gt;
&lt;br /&gt;
Consider a  type used to manage a declared in Pascal-Ada syntax : &lt;br /&gt;
&amp;lt;pre&amp;gt;Type Publication=&lt;br /&gt;
	record&lt;br /&gt;
		author,title:STRING;&lt;br /&gt;
		publication_year:INTEGER;&lt;br /&gt;
	case 	pubtype: (book,journal,conference_proceedings)of&lt;br /&gt;
		book: (publisher:STRING);&lt;br /&gt;
		journal: (volume,issue:STRING);&lt;br /&gt;
		proceedings: (editor, place:STRING) – Conference proceedings&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
Let B be a typical client of A. B will manipulate publications through a variable such as &lt;br /&gt;
p:PUBLICATION&lt;br /&gt;
and to do anything useful with p, will need to discriminate explicitly between the various cases, as in:&lt;br /&gt;
&amp;lt;pre&amp;gt;	case p of &lt;br /&gt;
		book:...Instructions which may access the field p.publisher&lt;br /&gt;
		journal:...Instructions which may access fields p.volume,p.issue&lt;br /&gt;
		proceedings:...Instructions which may access fields p.editor,p.place&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, whenever there is a need for a new variant, say technical reports of companies in this case, there is a need to extend the definition of type PUBLICATION in module A to support the new case, as well as  any client of A, such as B, will also require updating if it is used as a structure such as above, relying on an explicit list of cases for p.&lt;br /&gt;
What is observed is a violation of the SCP and is a disastrous situation for software change and evolution as a simple and natural addition may cause a chain reaction of changes across many client changes. This violation will occur whenever a certain notion admits a number of variants for ex. -&lt;br /&gt;
&lt;br /&gt;
*In graphics system: the notion of figure, with such variants as polygon, circle, ellipse, and other basic figure types.&lt;br /&gt;
&amp;lt;pre&amp;gt;For example old style procedural code to print different &amp;quot;shape&amp;quot; objects might read:&lt;br /&gt;
&lt;br /&gt;
 if (type==CIRCLE)&lt;br /&gt;
   print &amp;quot;Circle.  r=&amp;quot; + radius;&lt;br /&gt;
 else if (type==Square)&lt;br /&gt;
   print &amp;quot;Square.  sides=&amp;quot; + sideLength;&lt;br /&gt;
 else if (type==Rectangle)&lt;br /&gt;
   print &amp;quot;Rect.  h=&amp;quot; + height + &amp;quot; w=&amp;quot; + width;&lt;br /&gt;
 endif&amp;lt;/pre&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
This same list of alternatives would be used in computing the area, and it rendering to a GUI and in checking for overlap with another shape, etc., etc. So these lists of cases  have to be modified in all locations whenever you add a new shape.        &lt;br /&gt;
&lt;br /&gt;
*In a text editor: the notion of user command, with such variants as line insertion, line deletion, character deletion.&lt;br /&gt;
*In a compiler for a programming language, the notion of language construct, with such variants as instruction, expression, procedure.&lt;br /&gt;
&lt;br /&gt;
===Implementation of SCP===&lt;br /&gt;
Traditional methods do not provide a solution to the SCP violations. Inheritance related concepts of [http://en.wikipedia.org/wiki/Polymorphism polymorphism] and [http://en.wikipedia.org/wiki/Dynamic_binding_%28computer_science%29 Dynamic binding] provide the solution to this problem.&lt;br /&gt;
&lt;br /&gt;
The graphics system given above can be reimplemented in the Object Oriented Manner as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class SHAPE&lt;br /&gt;
  display_details&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class CIRCLE &amp;lt; SHAPE&lt;br /&gt;
  display_details&lt;br /&gt;
    print &amp;quot;Circle.  r=&amp;quot; + radius;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class SQUARE &amp;lt; SHAPE&lt;br /&gt;
  display_details&lt;br /&gt;
    print &amp;quot;Square.  sides=&amp;quot; + sideLength;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class RECTANGLE &amp;lt; SHAPE&lt;br /&gt;
  display_details&lt;br /&gt;
    print &amp;quot;Rect.  h=&amp;quot; + height + &amp;quot; w=&amp;quot; + width;&lt;br /&gt;
  end&lt;br /&gt;
end  &lt;br /&gt;
 &amp;lt;/pre&amp;gt; &lt;br /&gt;
Thus a new sub class of shape is created for each new type of shape. The function display_details to be called depends upon the type of the invoking object. Thus the list of switch case / if else statements would only be needed while creating the object. Further on no such statements have to be written for any of the other operations such as computing the area, rendering to a GUI or checking for overlap with another shape, etc., etc.&lt;br /&gt;
&lt;br /&gt;
===Other Highlights===&lt;br /&gt;
# According to the Single Choice principle exactly one module should know the list of choices, which contrasts the modularity goal which suggests that &amp;lt;i&amp;gt;at most one&amp;lt;/i&amp;gt; module should have this knowledge.&lt;br /&gt;
# The principle is about distribution of knowledge in a software system. The amount of information available to each module should be limited to the information that is required for its proper functioning. This can analogous to the &amp;quot;need-to-know&amp;quot; policy. That is, a module only knows that much as it needs to know.&lt;br /&gt;
# SCP is a direct consequence of the [http://en.wikipedia.org/wiki/Open/closed_principle Open Closed Principle].&lt;br /&gt;
# SCP is a strong form of [http://en.wikipedia.org/wiki/Information_hiding Information Hiding]. The module containing the list of choices tries to hide it from the the other modules.&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
The single choice principle is a principle of [http://en.wikipedia.org/wiki/Imperative_programming imperative] [http://en.wikipedia.org/wiki/Computer_programming computer programming].It directs us to limit the dissemination of exhaustive knowledge about variants of a certain notion. It is an impetus to [http://en.wikipedia.org/wiki/Polymorphism polymorphism] and aims at achieving high [http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29 cohesion] and low [http://en.wikipedia.org/wiki/Coupling_%28computer_science%29 coupling], one of the most important aspects of [http://en.wikipedia.org/wiki/Modular_programming Modular Programming].&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
# Object-Oriented Software Construction Second Edition, Bertrand Meyer pg 62-64.&lt;br /&gt;
# [http://c2.com/cgi/wiki?SingleChoicePrinciple Single Choice Principle]&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_17_Single_Choice_Pattern_am&amp;diff=29783</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 17 Single Choice Pattern am</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_17_Single_Choice_Pattern_am&amp;diff=29783"/>
		<updated>2009-11-20T00:10:59Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Single Choice Principle'''==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Single Choice Principle states that whenever a software system must support a set of alternatives, one and only one module in the system should know their exhaustive list. It is one of the five principles of software construction as stated by Bertrand Meyer, the other four being the [http://hebb.cis.uoguelph.ca/~dave/343/Lectures/swquality.html#linguistic Linguistic Modular Units Principle], the Self- Documentation Principle, the [http://en.wikipedia.org/wiki/Uniform_access_principle Uniform- Access Principle], and the [http://en.wikipedia.org/wiki/Open/closed_principle Open- Closed Principle]. The Single Choice Principle may be viewed as a consequence of both the Open-Closed and information Hiding rules. It was applied when designing [http://en.wikipedia.org/wiki/Eiffel_%28programming_language%29 Eiffel].This principle is a particular case of the [http://en.wikipedia.org/wiki/Don%27t_repeat_yourself Don't repeat yourself principle].&lt;br /&gt;
&lt;br /&gt;
===Violation of SCP===&lt;br /&gt;
&lt;br /&gt;
Consider a  type used to manage a declared in Pascal-Ada syntax : &lt;br /&gt;
&amp;lt;pre&amp;gt;Type Publication=&lt;br /&gt;
	record&lt;br /&gt;
		author,title:STRING;&lt;br /&gt;
		publication_year:INTEGER;&lt;br /&gt;
	case 	pubtype: (book,journal,conference_proceedings)of&lt;br /&gt;
		book: (publisher:STRING);&lt;br /&gt;
		journal: (volume,issue:STRING);&lt;br /&gt;
		proceedings: (editor, place:STRING) – Conference proceedings&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
Let B be a typical client of A. B will manipulate publications through a variable such as &lt;br /&gt;
p:PUBLICATION&lt;br /&gt;
and to do anything useful with p, will need to discriminate explicitly between the various cases, as in:&lt;br /&gt;
&amp;lt;pre&amp;gt;	case p of &lt;br /&gt;
		book:...Instructions which may access the field p.publisher&lt;br /&gt;
		journal:...Instructions which may access fields p.volume,p.issue&lt;br /&gt;
		proceedings:...Instructions which may access fields p.editor,p.place&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, whenever there is a need for a new variant, say technical reports of companies in this case, there is a need to extend the definition of type PUBLICATION in module A to support the new case, as well as  any client of A, such as B, will also require updating if it is used as a structure such as above, relying on an explicit list of cases for p.&lt;br /&gt;
What is observed is a violation of the SCP and is a disastrous situation for software change and evolution as a simple and natural addition may cause a chain reaction of changes across many client changes. This violation will occur whenever a certain notion admits a number of variants for ex. -&lt;br /&gt;
&lt;br /&gt;
*In graphics system: the notion of figure, with such variants as polygon, circle, ellipse, and other basic figure types.&lt;br /&gt;
&amp;lt;pre&amp;gt;For example old style procedural code to print different &amp;quot;shape&amp;quot; objects might read:&lt;br /&gt;
&lt;br /&gt;
 if (type==CIRCLE)&lt;br /&gt;
   print &amp;quot;Circle.  r=&amp;quot; + radius;&lt;br /&gt;
 else if (type==Square)&lt;br /&gt;
   print &amp;quot;Square.  sides=&amp;quot; + sideLength;&lt;br /&gt;
 else if (type==Rectangle)&lt;br /&gt;
   print &amp;quot;Rect.  h=&amp;quot; + height + &amp;quot; w=&amp;quot; + width;&lt;br /&gt;
 endif&amp;lt;/pre&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
This same list of alternatives would be used in computing the area, and it rendering to a GUI and in checking for overlap with another shape, etc., etc. So these lists of cases  have to be modified in all locations whenever you add a new shape.        &lt;br /&gt;
&lt;br /&gt;
*In a text editor: the notion of user command, with such variants as line insertion, line deletion, character deletion.&lt;br /&gt;
*In a compiler for a programming language, the notion of language construct, with such variants as instruction, expression, procedure.&lt;br /&gt;
&lt;br /&gt;
===Implementation of SCP===&lt;br /&gt;
Traditional methods do not provide a solution to the SCP violations. Inheritance related concepts of [http://en.wikipedia.org/wiki/Polymorphism polymorphism] and [http://en.wikipedia.org/wiki/Dynamic_binding_%28computer_science%29 Dynamic binding] provide the solution to this problem.&lt;br /&gt;
&lt;br /&gt;
The graphics system given above can be reimplemented in the Object Oriented Manner as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class SHAPE&lt;br /&gt;
  display_details&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class CIRCLE &amp;lt; SHAPE&lt;br /&gt;
  display_details&lt;br /&gt;
    print &amp;quot;Circle.  r=&amp;quot; + radius;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class SQUARE &amp;lt; SHAPE&lt;br /&gt;
  display_details&lt;br /&gt;
    print &amp;quot;Square.  sides=&amp;quot; + sideLength;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class RECTANGLE &amp;lt; SHAPE&lt;br /&gt;
  display_details&lt;br /&gt;
    print &amp;quot;Rect.  h=&amp;quot; + height + &amp;quot; w=&amp;quot; + width;&lt;br /&gt;
  end&lt;br /&gt;
end  &lt;br /&gt;
 &amp;lt;/pre&amp;gt; &lt;br /&gt;
Thus a new sub class of shape is created for each new type of shape. The function display_details to be called depends upon the type of the invoking object. Thus the list of switch case / if else statements would only be needed while creating the object. Further on no such statements have to be written for any of the other operations such as computing the area, rendering to a GUI or checking for overlap with another shape, etc., etc.&lt;br /&gt;
&lt;br /&gt;
===Other Highlights===&lt;br /&gt;
# According to the Single Choice principle exactly one module should know the list of choices, which contrasts the modularity goal which suggests that &amp;lt;i&amp;gt;at most one&amp;lt;/i&amp;gt; module should have this knowledge.&lt;br /&gt;
# The principle is about distribution of knowledge in a software system. The amount of information available to each module should be limited to the information that is required for its proper functioning. This can analogous to the &amp;quot;need-to-know&amp;quot; policy. That is, a module only knows that much as it needs to know.&lt;br /&gt;
# SCP is a direct consequence of the [http://en.wikipedia.org/wiki/Open/closed_principle Open Closed Principle].&lt;br /&gt;
# SCP is a strong form of [http://en.wikipedia.org/wiki/Information_hiding Information Hiding]. The module containing the list of choices tries to hide it from the the other modules.&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
The single choice principle is a principle of [http://en.wikipedia.org/wiki/Imperative_programming imperative] [http://en.wikipedia.org/wiki/Computer_programming computer programming].It directs us to limit the dissemination of exhaustive knowledge about variants of a certain notion. It is an impetus to [http://en.wikipedia.org/wiki/Polymorphism polymorphism] and aims at achieving high [http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29 cohesion] and low [http://en.wikipedia.org/wiki/Coupling_%28computer_science%29 coupling], one of the most important aspects of [http://en.wikipedia.org/wiki/Modular_programming Modular Programming].&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
# Object-Oriented Software Construction Second Edition, Bertrand Meyer pg 62-64.&lt;br /&gt;
# [http://c2.com/cgi/wiki?SingleChoicePrinciple Single Choice Principle]&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27658</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 7 Single Choice Pattern am</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27658"/>
		<updated>2009-11-17T21:45:59Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Single Choice Principle'''==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Single Choice Principle states that whenever a software system must support a set of alternatives, one and only one module in the system should know their exhaustive list. It is one of the five principles of software construction as stated by Bertrand Meyer, the other four being the [http://hebb.cis.uoguelph.ca/~dave/343/Lectures/swquality.html#linguistic Linguistic Modular Units Principle], the Self- Documentation Principle, the [http://en.wikipedia.org/wiki/Uniform_access_principle Uniform- Access Principle], and the [http://en.wikipedia.org/wiki/Open/closed_principle Open- Closed Principle]. The Single Choice Principle may be viewed as a consequence of both the Open-Closed and information Hiding rules. It was applied when designing [http://en.wikipedia.org/wiki/Eiffel_%28programming_language%29 Eiffel].This principle is a particular case of the [http://en.wikipedia.org/wiki/Don%27t_repeat_yourself Don't repeat yourself principle].&lt;br /&gt;
&lt;br /&gt;
===Violation of SCP===&lt;br /&gt;
&lt;br /&gt;
Consider a  type used to manage a declared in Pascal-Ada syntax : &lt;br /&gt;
&amp;lt;pre&amp;gt;Type Publication=&lt;br /&gt;
	record&lt;br /&gt;
		author,title:STRING;&lt;br /&gt;
		publication_year:INTEGER;&lt;br /&gt;
	case 	pubtype: (book,journal,conference_proceedings)of&lt;br /&gt;
		book: (publisher:STRING);&lt;br /&gt;
		journal: (volume,issue:STRING);&lt;br /&gt;
		proceedings: (editor, place:STRING) – Conference proceedings&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
Let B be a typical client of A. B will manipulate publications through a variable such as &lt;br /&gt;
p:PUBLICATION&lt;br /&gt;
and to do anything useful with p, will need to discriminate explicitly between the various cases, as in:&lt;br /&gt;
&amp;lt;pre&amp;gt;	case p of &lt;br /&gt;
		book:...Instructions which may access the field p.publisher&lt;br /&gt;
		journal:...Instructions which may access fields p.volume,p.issue&lt;br /&gt;
		proceedings:...Instructions which may access fields p.editor,p.place&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, whenever there is a need for a new variant, say technical reports of companies in this case, there is a need to extend the definition of type PUBLICATION in module A to support the new case, as well as  any client of A, such as B, will also require updating if it is used as a structure such as above, relying on an explicit list of cases for p.&lt;br /&gt;
What is observed is a violation of the SCP and is a disastrous situation for software change and evolution as a simple and natural addition may cause a chain reaction of changes across many client changes. This violation will occur whenever a certain notion admits a number of variants for ex. -&lt;br /&gt;
&lt;br /&gt;
*In graphics system: the notion of figure, with such variants as polygon, circle, ellipse, and other basic figure types.&lt;br /&gt;
&amp;lt;pre&amp;gt;For example old style procedural code to print different &amp;quot;shape&amp;quot; objects might read:&lt;br /&gt;
&lt;br /&gt;
 if (type==CIRCLE)&lt;br /&gt;
   print &amp;quot;Circle.  r=&amp;quot; + radius;&lt;br /&gt;
 else if (type==Square)&lt;br /&gt;
   print &amp;quot;Square.  sides=&amp;quot; + sideLength;&lt;br /&gt;
 else if (type==Rectangle)&lt;br /&gt;
   print &amp;quot;Rect.  h=&amp;quot; + height + &amp;quot; w=&amp;quot; + width;&lt;br /&gt;
 endif&amp;lt;/pre&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
This same list of alternatives would be used in computing the area, and it rendering to a GUI and in checking for overlap with another shape, etc., etc. So these lists of cases  have to be modified in all locations whenever you add a new shape.        &lt;br /&gt;
&lt;br /&gt;
*In a text editor: the notion of user command, with such variants as line insertion, line deletion, character deletion.&lt;br /&gt;
*In a compiler for a programming language, the notion of language construct, with such variants as instruction, expression, procedure.&lt;br /&gt;
&lt;br /&gt;
===Implementation of SCP===&lt;br /&gt;
===Other Highlights===&lt;br /&gt;
===Conclusion===&lt;br /&gt;
The single choice principle is a principle of [http://en.wikipedia.org/wiki/Imperative_programming imperative] [http://en.wikipedia.org/wiki/Computer_programming computer programming].It directs us to limit the dissemination of exhaustive knowledge about variants of a certain notion. It is an impetus to [http://en.wikipedia.org/wiki/Polymorphism polymorphism] and aims at achieving high [http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29 cohesion] and low [http://en.wikipedia.org/wiki/Coupling_%28computer_science%29 coupling], one of the most important aspects of [http://en.wikipedia.org/wiki/Modular_programming Modular Programming].&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27657</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 7 Single Choice Pattern am</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27657"/>
		<updated>2009-11-17T21:43:16Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Single Choice Principle'''==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Single Choice Principle states that whenever a software system must support a set of alternatives, one and only one module in the system should know their exhaustive list. It is one of the five principles of software construction as stated by Bertrand Meyer, the other four being the [http://hebb.cis.uoguelph.ca/~dave/343/Lectures/swquality.html#linguistic Linguistic Modular Units Principle], the Self- Documentation Principle, the [http://en.wikipedia.org/wiki/Uniform_access_principle Uniform- Access Principle], and the [http://en.wikipedia.org/wiki/Open/closed_principle Open- Closed Principle]. The Single Choice Principle may be viewed as a consequence of both the Open-Closed and information Hiding rules. It was applied when designing [http://en.wikipedia.org/wiki/Eiffel_%28programming_language%29 Eiffel].This principle is a particular case of the [http://en.wikipedia.org/wiki/Don%27t_repeat_yourself Don't repeat yourself principle].&lt;br /&gt;
&lt;br /&gt;
===Violation of SCP===&lt;br /&gt;
&lt;br /&gt;
Consider a  type used to manage a declared in Pascal-Ada syntax : &lt;br /&gt;
&amp;lt;pre&amp;gt;Type Publication=&lt;br /&gt;
	record&lt;br /&gt;
		author,title:STRING;&lt;br /&gt;
		publication_year:INTEGER;&lt;br /&gt;
	case 	pubtype: (book,journal,conference_proceedings)of&lt;br /&gt;
		book: (publisher:STRING);&lt;br /&gt;
		journal: (volume,issue:STRING);&lt;br /&gt;
		proceedings: (editor, place:STRING) – Conference proceedings&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
Let B be a typical client of A. B will manipulate publications through a variable such as &lt;br /&gt;
p:PUBLICATION&lt;br /&gt;
and to do anything useful with p, will need to discriminate explicitly between the various cases, as in:&lt;br /&gt;
&amp;lt;pre&amp;gt;	case p of &lt;br /&gt;
		book:...Instructions which may access the field p.publisher&lt;br /&gt;
		journal:...Instructions which may access fields p.volume,p.issue&lt;br /&gt;
		proceedings:...Instructions which may access fields p.editor,p.place&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, whenever there is a need for a new variant, say technical reports of companies in this case, there is a need to extend the definition of type PUBLICATION in module A to support the new case, as well as  any client of A, such as B, will also require updating if it is used as a structure such as above, relying on an explicit list of cases for p.&lt;br /&gt;
What is observed is a violation of the SCP and is a disastrous situation for software change and evolution as a simple and natural addition may cause a chain reaction of changes across many client changes. This violation will occur whenever a certain notion admits a number of variants for ex. -&lt;br /&gt;
&lt;br /&gt;
*In graphics system: the notion of figure, with such variants as polygon, circle, ellipse, and other basic figure types.&lt;br /&gt;
&amp;lt;pre&amp;gt;For example old style procedural code to print different &amp;quot;shape&amp;quot; objects might read:&lt;br /&gt;
&lt;br /&gt;
 if (type==CIRCLE)&lt;br /&gt;
   print &amp;quot;Circle.  r=&amp;quot; + radius;&lt;br /&gt;
 else if (type==Square)&lt;br /&gt;
   print &amp;quot;Square.  sides=&amp;quot; + sideLength;&lt;br /&gt;
 else if (type==Rectangle)&lt;br /&gt;
   print &amp;quot;Rect.  h=&amp;quot; + height + &amp;quot; w=&amp;quot; + width;&lt;br /&gt;
 endif&amp;lt;/pre&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
This same list of alternatives would be used in computing the area, and it rendering to a GUI and in checking for overlap with another shape, etc., etc. So these lists of cases  have to be modified in all locations whenever you add a new shape.        &lt;br /&gt;
&lt;br /&gt;
*In a text editor: the notion of user command, with such variants as line insertion, line deletion, character deletion.&lt;br /&gt;
*In a compiler for a programming language, the notion of language construct, with such variants as instruction, expression, procedure.&lt;br /&gt;
&lt;br /&gt;
===Implementation of SCP===&lt;br /&gt;
===Other Highlights===&lt;br /&gt;
===Conclusion===&lt;br /&gt;
The single choice principle is a principle of imperative computer programming.It directs us to limit the dissemination of exhaustive knowledge about variants of a certain notion. It is an impetus to polymorphism and aims at achieving high cohesion and low coupling, one of the most important aspects of Modularity.&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27656</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 7 Single Choice Pattern am</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27656"/>
		<updated>2009-11-17T21:42:48Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Single Choice Principle'''==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Single Choice Principle states that whenever a software system must support a set of alternatives, one and only one module in the system should know their exhaustive list. It is one of the five principles of software construction as stated by Bertrand Meyer, the other four being the [http://hebb.cis.uoguelph.ca/~dave/343/Lectures/swquality.html#linguistic Linguistic Modular Units Principle], the Self- Documentation Principle, the [http://en.wikipedia.org/wiki/Uniform_access_principle Uniform- Access Principle], and the [http://en.wikipedia.org/wiki/Open/closed_principle Open- Closed Principle]. The Single Choice Principle may be viewed as a consequence of both the Open-Closed and information Hiding rules. It was applied when designing [http://en.wikipedia.org/wiki/Eiffel_%28programming_language%29 Eiffel].This principle is a particular case of the [http://en.wikipedia.org/wiki/Don%27t_repeat_yourself Don't repeat yourself principle].&lt;br /&gt;
&lt;br /&gt;
===Violation of SCP===&lt;br /&gt;
&lt;br /&gt;
Consider a  type used to manage a declared in Pascal-Ada syntax : &lt;br /&gt;
&amp;lt;pre&amp;gt;Type Publication=&lt;br /&gt;
	record&lt;br /&gt;
		author,title:STRING;&lt;br /&gt;
		publication_year:INTEGER;&lt;br /&gt;
	case 	pubtype: (book,journal,conference_proceedings)of&lt;br /&gt;
		book: (publisher:STRING);&lt;br /&gt;
		journal: (volume,issue:STRING);&lt;br /&gt;
		proceedings: (editor, place:STRING) – Conference proceedings&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
Let B be a typical client of A. B will manipulate publications through a variable such as &lt;br /&gt;
p:PUBLICATION&lt;br /&gt;
and to do anything useful with p, will need to discriminate explicitly between the various cases, as in:&lt;br /&gt;
&amp;lt;pre&amp;gt;	case p of &lt;br /&gt;
		book:...Instructions which may access the field p.publisher&lt;br /&gt;
		journal:...Instructions which may access fields p.volume,p.issue&lt;br /&gt;
		proceedings:...Instructions which may access fields p.editor,p.place&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, whenever there is a need for a new variant, say technical reports of companies in this case, there is a need to extend the definition of type PUBLICATION in module A to support the new case, as well as  any client of A, such as B, will also require updating if it is used as a structure such as above, relying on an explicit list of cases for p.&lt;br /&gt;
What is observed is a violation of the SCP and is a disastrous situation for software change and evolution as a simple and natural addition may cause a chain reaction of changes across many client changes. This violation will occur whenever a certain notion admits a number of variants for ex. -&lt;br /&gt;
&lt;br /&gt;
*In graphics system: the notion of figure, with such variants as polygon, circle, ellipse, and other basic figure types.&lt;br /&gt;
&amp;lt;pre&amp;gt;For example old style procedural code to print different &amp;quot;shape&amp;quot; objects might read:&lt;br /&gt;
&lt;br /&gt;
 if (type==CIRCLE)&lt;br /&gt;
   print &amp;quot;Circle.  r=&amp;quot; + radius;&lt;br /&gt;
 else if (type==Square)&lt;br /&gt;
   print &amp;quot;Square.  sides=&amp;quot; + sideLength;&lt;br /&gt;
 else if (type==Rectangle)&lt;br /&gt;
   print &amp;quot;Rect.  h=&amp;quot; + height + &amp;quot; w=&amp;quot; + width;&lt;br /&gt;
 endif&amp;lt;/pre&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
This same list of alternatives would be used in computing the area, and it rendering to a GUI and in checking for overlap with another shape, etc., etc. So these lists of cases  have to be modified in all locations whenever you add a new shape.        &lt;br /&gt;
&lt;br /&gt;
*In a text editor: the notion of user command, with such variants as line insertion, line deletion, character deletion.&lt;br /&gt;
*In a compiler for a programming language, the notion of language construct, with such variants as instruction, expression, procedure.&lt;br /&gt;
&lt;br /&gt;
===Implementation of SCP===&lt;br /&gt;
===Other Highlights===&lt;br /&gt;
===Conclusion===&lt;br /&gt;
The single choice principle is a principle of imperative computer programming.It directs us to limit the dissemination of exhaustive knowledge about variants of a certain notion. It is an impetus to polymorphism and aims at achieving high cohesion and low coupling, one of the most important aspect of Modularity.&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27631</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 7 Single Choice Pattern am</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27631"/>
		<updated>2009-11-17T21:26:50Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Single Choice Principle'''==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Single Choice Principle states that whenever a software system must support a set of alternatives, one and only one module in the system should know their exhaustive list. It is one of the five principles of software construction as stated by Bertrand Meyer, the other four being the [http://hebb.cis.uoguelph.ca/~dave/343/Lectures/swquality.html#linguistic Linguistic Modular Units Principle], the Self- Documentation Principle, the [http://en.wikipedia.org/wiki/Uniform_access_principle Uniform- Access Principle], and the [http://en.wikipedia.org/wiki/Open/closed_principle Open- Closed Principle]. The Single Choice Principle may be viewed as a consequence of both the Open-Closed and information Hiding rules. It was applied when designing [http://en.wikipedia.org/wiki/Eiffel_%28programming_language%29 Eiffel].This principle is a particular case of the [http://en.wikipedia.org/wiki/Don%27t_repeat_yourself Don't repeat yourself principle].&lt;br /&gt;
&lt;br /&gt;
===Violation of SCP===&lt;br /&gt;
&lt;br /&gt;
Consider a  type used to manage a declared in Pascal-Ada syntax : &lt;br /&gt;
&amp;lt;pre&amp;gt;Type Publication=&lt;br /&gt;
	record&lt;br /&gt;
		author,title:STRING;&lt;br /&gt;
		publication_year:INTEGER;&lt;br /&gt;
	case 	pubtype: (book,journal,conference_proceedings)of&lt;br /&gt;
		book: (publisher:STRING);&lt;br /&gt;
		journal: (volume,issue:STRING);&lt;br /&gt;
		proceedings: (editor, place:STRING) – Conference proceedings&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
Let B be a typical client of A. B will manipulate publications through a variable such as &lt;br /&gt;
p:PUBLICATION&lt;br /&gt;
and to do anything useful with p, will need to discriminate explicitly between the various cases, as in:&lt;br /&gt;
&amp;lt;pre&amp;gt;	case p of &lt;br /&gt;
		book:...Instructions which may access the field p.publisher&lt;br /&gt;
		journal:...Instructions which may access fields p.volume,p.issue&lt;br /&gt;
		proceedings:...Instructions which may access fields p.editor,p.place&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, whenever there is a need for a new variant, say technical reports of companies in this case, there is a need to extend the definition of type PUBLICATION in module A to support the new case, as well as  any client of A, such as B, will also require updating if it is used as a structure such as above, relying on an explicit list of cases for p.&lt;br /&gt;
What is observed is a violation of the SCP and is a disastrous situation for software change and evolution as a simple and natural addition may cause a chain reaction of changes across many client changes. This violation will occur whenever a certain notion admits a number of variants for ex. -&lt;br /&gt;
&lt;br /&gt;
*In graphics system: the notion of figure, with such variants as polygon, circle, ellipse, and other basic figure types.&lt;br /&gt;
&amp;lt;pre&amp;gt;For example old style procedural code to print different &amp;quot;shape&amp;quot; objects might read:&lt;br /&gt;
&lt;br /&gt;
 if (type==CIRCLE)&lt;br /&gt;
   print &amp;quot;Circle.  r=&amp;quot; + radius;&lt;br /&gt;
 else if (type==Square)&lt;br /&gt;
   print &amp;quot;Square.  sides=&amp;quot; + sideLength;&lt;br /&gt;
 else if (type==Rectangle)&lt;br /&gt;
   print &amp;quot;Rect.  h=&amp;quot; + height + &amp;quot; w=&amp;quot; + width;&lt;br /&gt;
 endif&amp;lt;/pre&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
This same list of alternatives would be used in computing the area, and it rendering to a GUI and in checking for overlap with another shape, etc., etc. So these lists of cases  have to be modified in all locations whenever you add a new shape.        &lt;br /&gt;
&lt;br /&gt;
*In a text editor: the notion of user command, with such variants as line insertion, line deletion, character deletion.&lt;br /&gt;
*In a compiler for a programming language, the notion of language construct, with such variants as instruction, expression, procedure.&lt;br /&gt;
&lt;br /&gt;
===Implementation of SCP===&lt;br /&gt;
===Other Highlights===&lt;br /&gt;
===Conclusion===&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27629</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 7 Single Choice Pattern am</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27629"/>
		<updated>2009-11-17T21:25:46Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Single Choice Principle'''==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Single Choice Principle states that whenever a software system must support a set of alternatives, one and only one module in the system should know their exhaustive list. It is one of the five principles of software construction as stated by Bertrand Meyer, the other four being the [http://hebb.cis.uoguelph.ca/~dave/343/Lectures/swquality.html#linguistic Linguistic Modular Units Principle], the Self- Documentation Principle, the [http://en.wikipedia.org/wiki/Uniform_access_principle Uniform- Access Principle], and the [http://en.wikipedia.org/wiki/Open/closed_principle Open- Closed Principle]. The Single Choice Principle may be viewed as a consequence of both the Open-Closed and information Hiding rules. It was applied when designing [http://en.wikipedia.org/wiki/Eiffel_%28programming_language%29 Eiffel].This principle is a particular case of the Don't repeat yourself principle.&lt;br /&gt;
&lt;br /&gt;
===Violation of SCP===&lt;br /&gt;
&lt;br /&gt;
Consider a  type used to manage a declared in Pascal-Ada syntax : &lt;br /&gt;
&amp;lt;pre&amp;gt;Type Publication=&lt;br /&gt;
	record&lt;br /&gt;
		author,title:STRING;&lt;br /&gt;
		publication_year:INTEGER;&lt;br /&gt;
	case 	pubtype: (book,journal,conference_proceedings)of&lt;br /&gt;
		book: (publisher:STRING);&lt;br /&gt;
		journal: (volume,issue:STRING);&lt;br /&gt;
		proceedings: (editor, place:STRING) – Conference proceedings&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
Let B be a typical client of A. B will manipulate publications through a variable such as &lt;br /&gt;
p:PUBLICATION&lt;br /&gt;
and to do anything useful with p, will need to discriminate explicitly between the various cases, as in:&lt;br /&gt;
&amp;lt;pre&amp;gt;	case p of &lt;br /&gt;
		book:...Instructions which may access the field p.publisher&lt;br /&gt;
		journal:...Instructions which may access fields p.volume,p.issue&lt;br /&gt;
		proceedings:...Instructions which may access fields p.editor,p.place&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, whenever there is a need for a new variant, say technical reports of companies in this case, there is a need to extend the definition of type PUBLICATION in module A to support the new case, as well as  any client of A, such as B, will also require updating if it is used as a structure such as above, relying on an explicit list of cases for p.&lt;br /&gt;
What is observed is a violation of the SCP and is a disastrous situation for software change and evolution as a simple and natural addition may cause a chain reaction of changes across many client changes. This violation will occur whenever a certain notion admits a number of variants for ex. -&lt;br /&gt;
&lt;br /&gt;
*In graphics system: the notion of figure, with such variants as polygon, circle, ellipse, and other basic figure types.&lt;br /&gt;
&amp;lt;pre&amp;gt;For example old style procedural code to print different &amp;quot;shape&amp;quot; objects might read:&lt;br /&gt;
&lt;br /&gt;
 if (type==CIRCLE)&lt;br /&gt;
   print &amp;quot;Circle.  r=&amp;quot; + radius;&lt;br /&gt;
 else if (type==Square)&lt;br /&gt;
   print &amp;quot;Square.  sides=&amp;quot; + sideLength;&lt;br /&gt;
 else if (type==Rectangle)&lt;br /&gt;
   print &amp;quot;Rect.  h=&amp;quot; + height + &amp;quot; w=&amp;quot; + width;&lt;br /&gt;
 endif&amp;lt;/pre&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
This same list of alternatives would be used in computing the area, and it rendering to a GUI and in checking for overlap with another shape, etc., etc. So these lists of cases  have to be modified in all locations whenever you add a new shape.        &lt;br /&gt;
&lt;br /&gt;
*In a text editor: the notion of user command, with such variants as line insertion, line deletion, character deletion.&lt;br /&gt;
*In a compiler for a programming language, the notion of language construct, with such variants as instruction, expression, procedure.&lt;br /&gt;
&lt;br /&gt;
===Implementation of SCP===&lt;br /&gt;
===Other Highlights===&lt;br /&gt;
===Conclusion===&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27619</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 7 Single Choice Pattern am</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27619"/>
		<updated>2009-11-17T21:18:48Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Single Choice Principle'''==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Single Choice Principle states that whenever a software system must support a set of alternatives, one and only one module in the system should know their exhaustive list. It is one of the five principles of software construction as stated by Bertrand Meyer, the other four being the [http://hebb.cis.uoguelph.ca/~dave/343/Lectures/swquality.html#linguistic Linguistic Modular Units Principle], the Self- Documentation Principle, the [http://en.wikipedia.org/wiki/Uniform_access_principle Uniform- Access Principle], and the [http://en.wikipedia.org/wiki/Open/closed_principle Open- Closed Principle]. The Single Choice Principle may be viewed as a consequence of both the Open-Closed and information Hiding rules.&lt;br /&gt;
===Violation of SCP===&lt;br /&gt;
&lt;br /&gt;
Consider a  type used to manage a declared in Pascal-Ada syntax : &lt;br /&gt;
&amp;lt;pre&amp;gt;Type Publication=&lt;br /&gt;
	record&lt;br /&gt;
		author,title:STRING;&lt;br /&gt;
		publication_year:INTEGER;&lt;br /&gt;
	case 	pubtype: (book,journal,conference_proceedings)of&lt;br /&gt;
		book: (publisher:STRING);&lt;br /&gt;
		journal: (volume,issue:STRING);&lt;br /&gt;
		proceedings: (editor, place:STRING) – Conference proceedings&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
Let B be a typical client of A. B will manipulate publications through a variable such as &lt;br /&gt;
p:PUBLICATION&lt;br /&gt;
and to do anything useful with p, will need to discriminate explicitly between the various cases, as in:&lt;br /&gt;
&amp;lt;pre&amp;gt;	case p of &lt;br /&gt;
		book:...Instructions which may access the field p.publisher&lt;br /&gt;
		journal:...Instructions which may access fields p.volume,p.issue&lt;br /&gt;
		proceedings:...Instructions which may access fields p.editor,p.place&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, whenever there is a need for a new variant, say technical reports of companies in this case, there is a need to extend the definition of type PUBLICATION in module A to support the new case, as well as  any client of A, such as B, will also require updating if it is used as a structure such as above, relying on an explicit list of cases for p.&lt;br /&gt;
What is observed is a violation of the SCP and is a disastrous situation for software change and evolution as a simple and natural addition may cause a chain reaction of changes across many client changes. This violation will occur whenever a certain notion admits a number of variants for ex. -&lt;br /&gt;
&lt;br /&gt;
*In graphics system: the notion of figure, with such variants as polygon, circle, ellipse, and other basic figure types.&lt;br /&gt;
&amp;lt;pre&amp;gt;For example old style procedural code to print different &amp;quot;shape&amp;quot; objects might read:&lt;br /&gt;
&lt;br /&gt;
 if (type==CIRCLE)&lt;br /&gt;
   print &amp;quot;Circle.  r=&amp;quot; + radius;&lt;br /&gt;
 else if (type==Square)&lt;br /&gt;
   print &amp;quot;Square.  sides=&amp;quot; + sideLength;&lt;br /&gt;
 else if (type==Rectangle)&lt;br /&gt;
   print &amp;quot;Rect.  h=&amp;quot; + height + &amp;quot; w=&amp;quot; + width;&lt;br /&gt;
 endif&amp;lt;/pre&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
This same list of alternatives would be used in computing the area, and it rendering to a GUI and in checking for overlap with another shape, etc., etc. So these lists of cases  have to be modified in all locations whenever you add a new shape.        &lt;br /&gt;
&lt;br /&gt;
*In a text editor: the notion of user command, with such variants as line insertion, line deletion, character deletion.&lt;br /&gt;
*In a compiler for a programming language, the notion of language construct, with such variants as instruction, expression, procedure.&lt;br /&gt;
&lt;br /&gt;
===Implementation of SCP===&lt;br /&gt;
===Other Highlights===&lt;br /&gt;
===Conclusion===&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27608</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 7 Single Choice Pattern am</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27608"/>
		<updated>2009-11-17T21:01:11Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Single Choice Principle'''==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Single Choice Principle states that whenever a software system must support a set of alternatives, one and only one module in the system should know their exhaustive list. It is one of the five principles of software construction as stated by Bertrand Meyer, the other four being the Linguistic Modular Units Principle, the Self- Documentation Principle, the Uniform- Access Principle, and the Open- Closed Principle. The Single Choice Principle may be viewed as a consequence of both the Open-Closed and information Hiding rules.&lt;br /&gt;
===Violation of SCP===&lt;br /&gt;
&lt;br /&gt;
Consider a  type used to manage a declared in Pascal-Ada syntax : &lt;br /&gt;
&amp;lt;pre&amp;gt;Type Publication=&lt;br /&gt;
	record&lt;br /&gt;
		author,title:STRING;&lt;br /&gt;
		publication_year:INTEGER;&lt;br /&gt;
	case 	pubtype: (book,journal,conference_proceedings)of&lt;br /&gt;
		book: (publisher:STRING);&lt;br /&gt;
		journal: (volume,issue:STRING);&lt;br /&gt;
		proceedings: (editor, place:STRING) – Conference proceedings&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
Let B be a typical client of A. B will manipulate publications through a variable such as &lt;br /&gt;
p:PUBLICATION&lt;br /&gt;
and to do anything useful with p, will need to discriminate explicitly between the various cases, as in:&lt;br /&gt;
&amp;lt;pre&amp;gt;	case p of &lt;br /&gt;
		book:...Instructions which may access the field p.publisher&lt;br /&gt;
		journal:...Instructions which may access fields p.volume,p.issue&lt;br /&gt;
		proceedings:...Instructions which may access fields p.editor,p.place&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, whenever there is a need for a new variant, say technical reports of companies in this case, there is a need to extend the definition of type PUBLICATION in module A to support the new case, as well as  any client of A, such as B, will also require updating if it is used as a structure such as above, relying on an explicit list of cases for p.&lt;br /&gt;
What is observed is a violation of the SCP and is a disastrous situation for software change and evolution as a simple and natural addition may cause a chain reaction of changes across many client changes. This violation will occur whenever a certain notion admits a number of variants for ex. -&lt;br /&gt;
&lt;br /&gt;
*In graphics system: the notion of figure, with such variants as polygon, circle, ellipse, and other basic figure types.&lt;br /&gt;
&amp;lt;pre&amp;gt;For example old style procedural code to print different &amp;quot;shape&amp;quot; objects might read:&lt;br /&gt;
&lt;br /&gt;
 if (type==CIRCLE)&lt;br /&gt;
   print &amp;quot;Circle.  r=&amp;quot; + radius;&lt;br /&gt;
 else if (type==Square)&lt;br /&gt;
   print &amp;quot;Square.  sides=&amp;quot; + sideLength;&lt;br /&gt;
 else if (type==Rectangle)&lt;br /&gt;
   print &amp;quot;Rect.  h=&amp;quot; + height + &amp;quot; w=&amp;quot; + width;&lt;br /&gt;
 endif&amp;lt;/pre&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
This same list of alternatives would be used in computing the area, and it rendering to a GUI and in checking for overlap with another shape, etc., etc. So these lists of cases  have to be modified in all locations whenever you add a new shape.        &lt;br /&gt;
&lt;br /&gt;
*In a text editor: the notion of user command, with such variants as line insertion, line deletion, character deletion.&lt;br /&gt;
*In a compiler for a programming language, the notion of language construct, with such variants as instruction, expression, procedure.&lt;br /&gt;
&lt;br /&gt;
===Implementation of SCP===&lt;br /&gt;
===Other Highlights===&lt;br /&gt;
===Conclusion===&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27606</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 7 Single Choice Pattern am</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27606"/>
		<updated>2009-11-17T20:53:56Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Single Choice Principle'''==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Single Choice Principle states that whenever a software system must support a set of alternatives, one and only one module in the system should know their exhaustive list. It is one of the five principles of software construction as stated by Bertrand Meyer, the other four being the Linguistic Modular Units Principle, the Self- Documentation Principle, the Uniform- Access Principle, and the Open- Closed Principle. The Single Choice Principle may be viewed as a consequence of both the Open-Closed and information Hiding rules.&lt;br /&gt;
===Violation of SCP===&lt;br /&gt;
&lt;br /&gt;
Consider a  type used to manage a declared in Pascal-Ada syntax : &lt;br /&gt;
&amp;lt;pre&amp;gt;Type Publication=&lt;br /&gt;
	record&lt;br /&gt;
		author,title:STRING;&lt;br /&gt;
		publication_year:INTEGER;&lt;br /&gt;
	case 	pubtype: (book,journal,conference_proceedings)of&lt;br /&gt;
		book: (publisher:STRING);&lt;br /&gt;
		journal: (volume,issue:STRING);&lt;br /&gt;
		proceedings: (editor, place:STRING) – Conference proceedings&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
Let B be a typical client of A. B will manipulate publications through a variable such as &lt;br /&gt;
p:PUBLICATION&lt;br /&gt;
and to do anything useful with p, will need to discriminate explicitly between the various cases, as in:&lt;br /&gt;
&amp;lt;pre&amp;gt;	case p of &lt;br /&gt;
		book:...Instructions which may access the field p.publisher&lt;br /&gt;
		journal:...Instructions which may access fields p.volume,p.issue&lt;br /&gt;
		proceedings:...Instructions which may access fields p.editor,p.place&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, whenever there is a need for a new variant, say technical reports of companies in this case, there is a need to extend the definition of type PUBLICATION in module A to support the new case, as well as  any client of A, such as B, will also require updating if it is used as a structure such as above, relying on an explicit list of cases for p.&lt;br /&gt;
What is observed is a violation of the SCP and is a disastrous situation for software change and evolution as a simple and natural addition may cause a chain reaction of changes across many client changes. This violation will occur whenever a certain notion admits a number of variants for ex. -&lt;br /&gt;
&lt;br /&gt;
*In graphics system: the notion of figure, with such variants as polygon, circle, ellipse, and other basic figure types.&lt;br /&gt;
&amp;lt;pre&amp;gt;For example old style procedural code to print different &amp;quot;shape&amp;quot; objects might read:&lt;br /&gt;
&lt;br /&gt;
 if (type==CIRCLE)&lt;br /&gt;
   print &amp;quot;Circle.  r=&amp;quot; + radius;&lt;br /&gt;
 else if (type==Square)&lt;br /&gt;
   print &amp;quot;Square.  sides=&amp;quot; + sideLength;&lt;br /&gt;
 else if (type==Rectangle)&lt;br /&gt;
   print &amp;quot;Rect.  h=&amp;quot; + height + &amp;quot; w=&amp;quot; + width;&lt;br /&gt;
 endif&amp;lt;/pre&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
This same list of alternatives would be used in computing the area, and it rendering to a GUI and in checking for overlap with another shape, etc., etc. So these lists of cases  have to be modified in all locations whenever you add a new shape.        &lt;br /&gt;
&lt;br /&gt;
*In a text editor: the notion of user command, with such variants as line insertion, line deletion, character deletion.&lt;br /&gt;
*In a compiler for a programming language, the notion of language construct, with such variants as instruction, expression, procedure.&lt;br /&gt;
&lt;br /&gt;
===Implementation of SCP===&lt;br /&gt;
===Other Highlights===&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27604</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 7 Single Choice Pattern am</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27604"/>
		<updated>2009-11-17T20:50:07Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Violation of Single Choice Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Single Choice Principle'''==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Single Choice Principle states that whenever a software system must support a set of alternatives, one and only one module in the system should know their exhaustive list. It is one of the five principles of software construction as stated by Bertrand Meyer, the other four being the Linguistic Modular Units Principle, the Self- Documentation Principle, the Uniform- Access Principle, and the Open- Closed Principle. The Single Choice Principle may be viewed as a consequence of both the Open-Closed and information Hiding rules.&lt;br /&gt;
===Violation of Single Choice Principle===&lt;br /&gt;
&lt;br /&gt;
Consider a  type used to manage a declared in Pascal-Ada syntax : &lt;br /&gt;
&amp;lt;pre&amp;gt;Type Publication=&lt;br /&gt;
	record&lt;br /&gt;
		author,title:STRING;&lt;br /&gt;
		publication_year:INTEGER;&lt;br /&gt;
	case 	pubtype: (book,journal,conference_proceedings)of&lt;br /&gt;
		book: (publisher:STRING);&lt;br /&gt;
		journal: (volume,issue:STRING);&lt;br /&gt;
		proceedings: (editor, place:STRING) – Conference proceedings&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
Let B be a typical client of A. B will manipulate publications through a variable such as &lt;br /&gt;
p:PUBLICATION&lt;br /&gt;
and to do anything useful with p, will need to discriminate explicitly between the various cases, as in:&lt;br /&gt;
&amp;lt;pre&amp;gt;	case p of &lt;br /&gt;
		book:...Instructions which may access the field p.publisher&lt;br /&gt;
		journal:...Instructions which may access fields p.volume,p.issue&lt;br /&gt;
		proceedings:...Instructions which may access fields p.editor,p.place&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, whenever there is a need for a new variant, say technical reports of companies in this case, there is a need to extend the definition of type PUBLICATION in module A to support the new case, as well as  any client of A, such as B, will also require updating if it is used as a structure such as above, relying on an explicit list of cases for p.&lt;br /&gt;
What is observed is a violation of the SCP and is a disastrous situation for software change and evolution as a simple and natural addition may cause a chain reaction of changes across many client changes. This violation will occur whenever a certain notion admits a number of variants for ex. -&lt;br /&gt;
&lt;br /&gt;
*In graphics system: the notion of figure, with such variants as polygon, circle, ellipse, and other basic figure types.&lt;br /&gt;
&amp;lt;pre&amp;gt;For example old style procedural code to print different &amp;quot;shape&amp;quot; objects might read:&lt;br /&gt;
&lt;br /&gt;
 if (type==CIRCLE)&lt;br /&gt;
   print &amp;quot;Circle.  r=&amp;quot; + radius;&lt;br /&gt;
 else if (type==Square)&lt;br /&gt;
   print &amp;quot;Square.  sides=&amp;quot; + sideLength;&lt;br /&gt;
 else if (type==Rectangle)&lt;br /&gt;
   print &amp;quot;Rect.  h=&amp;quot; + height + &amp;quot; w=&amp;quot; + width;&lt;br /&gt;
 endif&amp;lt;/pre&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
This same list of alternatives would be used in computing the area, and it rendering to a GUI and in checking for overlap with another shape, etc., etc. So these lists of cases  have to be modified in all locations whenever you add a new shape.        &lt;br /&gt;
&lt;br /&gt;
*In a text editor: the notion of user command, with such variants as line insertion, line deletion, character deletion.&lt;br /&gt;
*In a compiler for a programming language, the notion of language construct, with such variants as instruction, expression, procedure.&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27580</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 7 Single Choice Pattern am</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27580"/>
		<updated>2009-11-17T20:36:54Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Violation of Single Choice Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Single Choice Principle'''==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Single Choice Principle states that whenever a software system must support a set of alternatives, one and only one module in the system should know their exhaustive list. It is one of the five principles of software construction as stated by Bertrand Meyer, the other four being the Linguistic Modular Units Principle, the Self- Documentation Principle, the Uniform- Access Principle, and the Open- Closed Principle. The Single Choice Principle may be viewed as a consequence of both the Open-Closed and information Hiding rules.&lt;br /&gt;
===Violation of Single Choice Principle===&lt;br /&gt;
&lt;br /&gt;
Consider a  type used to manage a declared in Pascal-Ada syntax : &lt;br /&gt;
&amp;lt;pre&amp;gt;Type Publication=&lt;br /&gt;
	record&lt;br /&gt;
		author,title:STRING;&lt;br /&gt;
		publication_year:INTEGER;&lt;br /&gt;
	case 	pubtype: (book,journal,conference_proceedings)of&lt;br /&gt;
		book: (publisher:STRING);&lt;br /&gt;
		journal: (volume,issue:STRING);&lt;br /&gt;
		proceedings: (editor, place:STRING) – Conference proceedings&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
Let B be a typical client of A. B will manipulate publications through a variable such as &lt;br /&gt;
p:PUBLICATION&lt;br /&gt;
and to do anything useful with p, will need to discriminate explicitly between the various cases, as in:&lt;br /&gt;
&amp;lt;pre&amp;gt;	case p of &lt;br /&gt;
		book:...Instructions which may access the field p.publisher&lt;br /&gt;
		journal:...Instructions which may access fields p.volume,p.issue&lt;br /&gt;
		proceedings:...Instructions which may access fields p.editor,p.place&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, whenever there is a need for a new variant, say technical reports of companies in this case, there is a need to extend the definition of type PUBLICATION in module A to support the new case, as well as  any client of A, such as B, will also require updating if it is used as a structure such as above, relying on an explicit list of cases for p.&lt;br /&gt;
What is observed is a violation of the SCP and is a disastrous situation for software change and evolution as a simple and natural addition may cause a chain reaction of changes across many client changes. This violation will occur whenever a certain notion admits a number of variants for ex. -&lt;br /&gt;
&lt;br /&gt;
*	In graphics system: the notion of figure, with such variants as polygon, circle, ellipse, and other basic figure types.&lt;br /&gt;
*	In a text editor: the notion of user command, with such variants as line insertion, line deletion, character deletion.&lt;br /&gt;
*	In a compiler for a programming language, the notion of language construct, with such variants as instruction, expression, procedure.&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27578</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 7 Single Choice Pattern am</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27578"/>
		<updated>2009-11-17T20:34:23Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Violation of Single Choice Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Single Choice Principle'''==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Single Choice Principle states that whenever a software system must support a set of alternatives, one and only one module in the system should know their exhaustive list. It is one of the five principles of software construction as stated by Bertrand Meyer, the other four being the Linguistic Modular Units Principle, the Self- Documentation Principle, the Uniform- Access Principle, and the Open- Closed Principle. The Single Choice Principle may be viewed as a consequence of both the Open-Closed and information Hiding rules.&lt;br /&gt;
===Violation of Single Choice Principle===&lt;br /&gt;
&lt;br /&gt;
Consider a  type used to manage a declared in Pascal-Ada syntax : &lt;br /&gt;
&amp;lt;pre&amp;gt;Type Publication=&lt;br /&gt;
	record&lt;br /&gt;
		author,title:STRING;&lt;br /&gt;
		publication_year:INTEGER;&lt;br /&gt;
	case 	pubtype: (book,journal,conference_proceedings)of&lt;br /&gt;
		book: (publisher:STRING);&lt;br /&gt;
		journal: (volume,issue:STRING);&lt;br /&gt;
		proceedings: (editor, place:STRING) – Conference proceedings&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
Let B be a typical client of A. B will manipulate publications through a variable such as &lt;br /&gt;
p:PUBLICATION&lt;br /&gt;
and to do anything useful with p, will need to discriminate explicitly between the various cases, as in:&lt;br /&gt;
&amp;lt;pre&amp;gt;	case p of &lt;br /&gt;
		book:...Instructions which may access the field p.publisher&lt;br /&gt;
		journal:...Instructions which may access fields p.volume,p.issue&lt;br /&gt;
		proceedings:...Instructions which may access fields p.editor,p.place&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, whenever there is a need for a new variant, say technical reports of companies in this case, there is a need to extend the definition of type PUBLICATION in module A to support the new case, as well as  any client of A, such as B, will also require updating if it is used as a structure such as above, relying on an explicit list of cases for p.&lt;br /&gt;
What is observed is a violation of the SCP and is a disastrous situation for software change and evolution as a simple and natural addition may cause a chain reaction of changes across many client changes. This violation will occur whenever a certain notion admits a number of variants for ex. -&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27575</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 7 Single Choice Pattern am</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27575"/>
		<updated>2009-11-17T20:33:28Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Violation of Single Choice Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Single Choice Principle'''==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Single Choice Principle states that whenever a software system must support a set of alternatives, one and only one module in the system should know their exhaustive list. It is one of the five principles of software construction as stated by Bertrand Meyer, the other four being the Linguistic Modular Units Principle, the Self- Documentation Principle, the Uniform- Access Principle, and the Open- Closed Principle. The Single Choice Principle may be viewed as a consequence of both the Open-Closed and information Hiding rules.&lt;br /&gt;
===Violation of Single Choice Principle===&lt;br /&gt;
&lt;br /&gt;
Consider a  type used to manage a declared in Pascal-Ada syntax : &lt;br /&gt;
&amp;lt;pre&amp;gt;Type Publication=&lt;br /&gt;
	record&lt;br /&gt;
		author,title:STRING;&lt;br /&gt;
		publication_year:INTEGER;&lt;br /&gt;
	case 	 pubtype: (book,journal,conference_proceedings)of&lt;br /&gt;
		book: (publisher:STRING);&lt;br /&gt;
		journal: (volume,issue:STRING);&lt;br /&gt;
		proceedings: (editor, place:STRING) – Conference proceedings&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
Let B be a typical client of A. B will manipulate publications through a variable such as &lt;br /&gt;
p:PUBLICATION&lt;br /&gt;
and to do anything useful with p, will need to discriminate explicitly between the various cases, as in:&lt;br /&gt;
&amp;lt;pre&amp;gt;	case p of &lt;br /&gt;
		book:..Instructions which may access the field p.publisher&lt;br /&gt;
		journal:..Instructions which may access fields p.volume,p.issue&lt;br /&gt;
		proceedings:..Instructions which may access fields p.editor,p.place&lt;br /&gt;
	end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, whenever there is a need for a new variant, say technical reports of companies in this case, there is a need to extend the definition of type PUBLICATION in module A to support the new case, as well as  any client of A, such as B, will also require updating if it is used as a structure such as above, relying on an explicit list of cases for p.&lt;br /&gt;
What is observed is a violation of the SCP and is a disastrous situation for software change and evolution as a simple and natural addition may cause a chain reaction of changes across many client changes. This violation will occur whenever a certain notion admits a number of variants for eg.,&lt;br /&gt;
•	I&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27573</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 7 Single Choice Pattern am</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27573"/>
		<updated>2009-11-17T20:30:40Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Single Choice Principle'''==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Single Choice Principle states that whenever a software system must support a set of alternatives, one and only one module in the system should know their exhaustive list. It is one of the five principles of software construction as stated by Bertrand Meyer, the other four being the Linguistic Modular Units Principle, the Self- Documentation Principle, the Uniform- Access Principle, and the Open- Closed Principle. The Single Choice Principle may be viewed as a consequence of both the Open-Closed and information Hiding rules.&lt;br /&gt;
===Violation of Single Choice Principle===&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27572</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 7 Single Choice Pattern am</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27572"/>
		<updated>2009-11-17T20:29:14Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Single Choice Pattern'''==&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Single Choice Principle states that whenever a software system must support a set of alternatives, one and only one module in the system should know their exhaustive list. It is one of the five principles of software construction as stated by Bertrand Meyer, the other four being the Linguistic Modular Units Principle, the Self- Documentation Principle, the Uniform- Access Principle, and the Open- Closed Principle. The Single Choice Principle may be viewed as a consequence of both the Open-Closed and information Hiding rules.&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27571</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 7 Single Choice Pattern am</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27571"/>
		<updated>2009-11-17T20:28:47Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Single Choice Pattern'''==&lt;br /&gt;
===Introduction===&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27570</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 7 Single Choice Pattern am</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_7_Single_Choice_Pattern_am&amp;diff=27570"/>
		<updated>2009-11-17T20:28:13Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Single Choice Pattern'''==&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19200</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19200"/>
		<updated>2009-09-15T19:27:48Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* See Also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage data, especially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing changes are important for software engineers, since most of time they need to add, modify or fix a small portion of the code (also known as creating new version). Version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control] is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management  SCM]. Also  known  as  ''revision  control'', it acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows multiple  users  to  edit  the  same  document  at  the  same  time. This provides a  valuable  resource  to team  projects,   thereby enabling a  better  working  environment.  Keeping  records  of  all  changes  done to  a  set  of  information  provides  a  reliable  solution  to  data  management,  and  an  archive  for  future reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, he  can  ''checkout'' the  corresponding file  from  the  system,  thus getting access to  the  most  up‐to‐date  version  of  it.  Once  the  file  has  been  amended,  the  user  can  then  commit and  re‐submit the  file,  updating  the  copy  in  the  repository , ready  for  use by other users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and  &lt;br /&gt;
 checking-out.Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file&lt;br /&gt;
 revision from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
The basic purpose of a Version Control System was to maintain different versions of a file.&lt;br /&gt;
&lt;br /&gt;
Following are some issues requiring a Version Control System:&lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : While working in a team project it gets difficult to keep track of what changes are made in the code, why they are made and who made them. A VCS enables change tracking by documenting every change with all the requisite details.&lt;br /&gt;
* '''Reversion''' : At times changes in a particular code module can lead to the entire application failing during regression testing and calls for reversion to a code version that is known good. If reversion is difficult or unreliable, it's hard to risk making changes at all.&lt;br /&gt;
* '''Bug tracking''' : In an agile software development environment it's quite common to get new bug reports for a particular version after the code has mutated away from it considerably.But when the bug doesn't reproduce under the new version, it gets difficult to know whether it still exists or has been fixed already. Under such circumstances it calls for getting back to the older version of the code in order to reproduce and comprehend it.&lt;br /&gt;
* '''Concurrency''' : The ability to have many people across separate geographic locations modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''' : The ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
[[Image:History.jpg|650px|thumb|center| Milestone of version control development.]]&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when [http://en.wikipedia.org/wiki/Software_configuration_management Software  Configuration  Management SCM] became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System(SCCS)====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model where in only one person could check out and edit a file at one time.This led to serialized development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It worked  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a [http://en.wikipedia.org/wiki/Patch_(Unix) diff] or a [http://en.wikipedia.org/wiki/Patch_(Unix) patchfile].&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions.In forward deltas the origin version is stored, all subsequent versions are stored as sets of changes or deltas where as in backword deltas, the most recent version is stored, all previous versions are stored as set [http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf &amp;lt;sup&amp;gt;|1|&amp;lt;/sup&amp;gt;] Logically similar to [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS],it has a cleaner command interface and good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site[http://catb.org/esr/writings/taoup/html/ch15s05.html &amp;lt;sup&amp;gt;|2|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to [http://en.wikipedia.org/wiki/Concurrent_Versions_System  CVS]  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by [http://en.wikipedia.org/wiki/CollabNet CollabNet Inc.] Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more. Distributed revision control took a peer-to-peer approach, as opposed to the client-server approach of centralized systems. The repository was split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  could  be  stored  on  servers  or  local  machines.This enabled every developer to edit his local sharable copy without having to connect to any network connection.Synchronization was conducted by exchanging patches (change-sets) from peer to peer.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here].&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized[http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/ &amp;lt;sup&amp;gt;|3|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems, to being a part of Wiki too. Whether a waterfall, spiral, iterative, agile or open source approach is used, improvements to VCS technology have a direct impact on collaboration effectiveness. Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===See Also===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 [3] Bryan O'Sullivan, ACM 2009, [http://portal.acm.org/citation.cfm?id=1594204.1595636&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=50565619&amp;amp;CFTOKEN=27688531 Making Sense of Revision-control Systems]&lt;br /&gt;
 &lt;br /&gt;
[4] Löh, A., Swierstra, W., Leijen, D. 2007, [http://people.cs.uu.nl/andres/VersionControl.html A principled approach to version control] &lt;br /&gt;
 &lt;br /&gt;
[5] Marc J. Rochkind, IEEE Transactions on Software Engineering December 1975, [http://basepath.com/aup/talks/SCCS-Slideshow.pdf The Source Code Control System]&lt;br /&gt;
&lt;br /&gt;
[6] Ian Clatworthy, Distributed Version Control Systems – Why and How, [http://people.canonical.com/~ianc/papers/dvcs-why-and-how.xhtml Distributed Version Control System]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
[1] http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf&lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19199</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19199"/>
		<updated>2009-09-15T19:25:32Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* See Also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage data, especially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing changes are important for software engineers, since most of time they need to add, modify or fix a small portion of the code (also known as creating new version). Version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control] is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management  SCM]. Also  known  as  ''revision  control'', it acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows multiple  users  to  edit  the  same  document  at  the  same  time. This provides a  valuable  resource  to team  projects,   thereby enabling a  better  working  environment.  Keeping  records  of  all  changes  done to  a  set  of  information  provides  a  reliable  solution  to  data  management,  and  an  archive  for  future reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, he  can  ''checkout'' the  corresponding file  from  the  system,  thus getting access to  the  most  up‐to‐date  version  of  it.  Once  the  file  has  been  amended,  the  user  can  then  commit and  re‐submit the  file,  updating  the  copy  in  the  repository , ready  for  use by other users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and  &lt;br /&gt;
 checking-out.Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file&lt;br /&gt;
 revision from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
The basic purpose of a Version Control System was to maintain different versions of a file.&lt;br /&gt;
&lt;br /&gt;
Following are some issues requiring a Version Control System:&lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : While working in a team project it gets difficult to keep track of what changes are made in the code, why they are made and who made them. A VCS enables change tracking by documenting every change with all the requisite details.&lt;br /&gt;
* '''Reversion''' : At times changes in a particular code module can lead to the entire application failing during regression testing and calls for reversion to a code version that is known good. If reversion is difficult or unreliable, it's hard to risk making changes at all.&lt;br /&gt;
* '''Bug tracking''' : In an agile software development environment it's quite common to get new bug reports for a particular version after the code has mutated away from it considerably.But when the bug doesn't reproduce under the new version, it gets difficult to know whether it still exists or has been fixed already. Under such circumstances it calls for getting back to the older version of the code in order to reproduce and comprehend it.&lt;br /&gt;
* '''Concurrency''' : The ability to have many people across separate geographic locations modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''' : The ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
[[Image:History.jpg|650px|thumb|center| Milestone of version control development.]]&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when [http://en.wikipedia.org/wiki/Software_configuration_management Software  Configuration  Management SCM] became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System(SCCS)====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model where in only one person could check out and edit a file at one time.This led to serialized development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It worked  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a [http://en.wikipedia.org/wiki/Patch_(Unix) diff] or a [http://en.wikipedia.org/wiki/Patch_(Unix) patchfile].&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions.In forward deltas the origin version is stored, all subsequent versions are stored as sets of changes or deltas where as in backword deltas, the most recent version is stored, all previous versions are stored as set [http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf &amp;lt;sup&amp;gt;|1|&amp;lt;/sup&amp;gt;] Logically similar to [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS],it has a cleaner command interface and good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site[http://catb.org/esr/writings/taoup/html/ch15s05.html &amp;lt;sup&amp;gt;|2|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to [http://en.wikipedia.org/wiki/Concurrent_Versions_System  CVS]  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by [http://en.wikipedia.org/wiki/CollabNet CollabNet Inc.] Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more. Distributed revision control took a peer-to-peer approach, as opposed to the client-server approach of centralized systems. The repository was split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  could  be  stored  on  servers  or  local  machines.This enabled every developer to edit his local sharable copy without having to connect to any network connection.Synchronization was conducted by exchanging patches (change-sets) from peer to peer.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here].&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized[http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/ &amp;lt;sup&amp;gt;|3|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems, to being a part of Wiki too. Whether a waterfall, spiral, iterative, agile or open source approach is used, improvements to VCS technology have a direct impact on collaboration effectiveness. Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===See Also===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 [3] Bryan O'Sullivan, ACM 2009, [http://portal.acm.org/citation.cfm?id=1594204.1595636&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=50565619&amp;amp;CFTOKEN=27688531 Making Sense of Revision-control Systems]&lt;br /&gt;
 &lt;br /&gt;
[4] Löh, A., Swierstra, W., Leijen, D. 2007, [http://people.cs.uu.nl/andres/VersionControl.html A principled approach to version control] &lt;br /&gt;
 &lt;br /&gt;
[5] Marc J. Rochkind, IEEE Transactions on Software Engineering December 1975, [http://basepath.com/aup/talks/SCCS-Slideshow.pdf The Source Code Control System]&lt;br /&gt;
&lt;br /&gt;
[6]Ian Clatworthy, Distributed Version Control Systems – Why and How, [http://people.canonical.com/~ianc/papers/dvcs-why-and-how.xhtml]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
[1] http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf&lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19198</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19198"/>
		<updated>2009-09-15T19:23:24Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Distributed Version Control */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage data, especially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing changes are important for software engineers, since most of time they need to add, modify or fix a small portion of the code (also known as creating new version). Version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control] is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management  SCM]. Also  known  as  ''revision  control'', it acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows multiple  users  to  edit  the  same  document  at  the  same  time. This provides a  valuable  resource  to team  projects,   thereby enabling a  better  working  environment.  Keeping  records  of  all  changes  done to  a  set  of  information  provides  a  reliable  solution  to  data  management,  and  an  archive  for  future reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, he  can  ''checkout'' the  corresponding file  from  the  system,  thus getting access to  the  most  up‐to‐date  version  of  it.  Once  the  file  has  been  amended,  the  user  can  then  commit and  re‐submit the  file,  updating  the  copy  in  the  repository , ready  for  use by other users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and  &lt;br /&gt;
 checking-out.Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file&lt;br /&gt;
 revision from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
The basic purpose of a Version Control System was to maintain different versions of a file.&lt;br /&gt;
&lt;br /&gt;
Following are some issues requiring a Version Control System:&lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : While working in a team project it gets difficult to keep track of what changes are made in the code, why they are made and who made them. A VCS enables change tracking by documenting every change with all the requisite details.&lt;br /&gt;
* '''Reversion''' : At times changes in a particular code module can lead to the entire application failing during regression testing and calls for reversion to a code version that is known good. If reversion is difficult or unreliable, it's hard to risk making changes at all.&lt;br /&gt;
* '''Bug tracking''' : In an agile software development environment it's quite common to get new bug reports for a particular version after the code has mutated away from it considerably.But when the bug doesn't reproduce under the new version, it gets difficult to know whether it still exists or has been fixed already. Under such circumstances it calls for getting back to the older version of the code in order to reproduce and comprehend it.&lt;br /&gt;
* '''Concurrency''' : The ability to have many people across separate geographic locations modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''' : The ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
[[Image:History.jpg|650px|thumb|center| Milestone of version control development.]]&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when [http://en.wikipedia.org/wiki/Software_configuration_management Software  Configuration  Management SCM] became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System(SCCS)====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model where in only one person could check out and edit a file at one time.This led to serialized development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It worked  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a [http://en.wikipedia.org/wiki/Patch_(Unix) diff] or a [http://en.wikipedia.org/wiki/Patch_(Unix) patchfile].&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions.In forward deltas the origin version is stored, all subsequent versions are stored as sets of changes or deltas where as in backword deltas, the most recent version is stored, all previous versions are stored as set [http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf &amp;lt;sup&amp;gt;|1|&amp;lt;/sup&amp;gt;] Logically similar to [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS],it has a cleaner command interface and good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site[http://catb.org/esr/writings/taoup/html/ch15s05.html &amp;lt;sup&amp;gt;|2|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to [http://en.wikipedia.org/wiki/Concurrent_Versions_System  CVS]  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by [http://en.wikipedia.org/wiki/CollabNet CollabNet Inc.] Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more. Distributed revision control took a peer-to-peer approach, as opposed to the client-server approach of centralized systems. The repository was split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  could  be  stored  on  servers  or  local  machines.This enabled every developer to edit his local sharable copy without having to connect to any network connection.Synchronization was conducted by exchanging patches (change-sets) from peer to peer.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here].&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized[http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/ &amp;lt;sup&amp;gt;|3|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems, to being a part of Wiki too. Whether a waterfall, spiral, iterative, agile or open source approach is used, improvements to VCS technology have a direct impact on collaboration effectiveness. Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===See Also===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 [3] Bryan O'Sullivan, ACM 2009, [http://portal.acm.org/citation.cfm?id=1594204.1595636&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=50565619&amp;amp;CFTOKEN=27688531 Making Sense of Revision-control Systems]&lt;br /&gt;
 &lt;br /&gt;
[4] Löh, A., Swierstra, W., Leijen, D. 2007, [http://people.cs.uu.nl/andres/VersionControl.html A principled approach to version control] &lt;br /&gt;
 &lt;br /&gt;
[5] Marc J. Rochkind, IEEE Transactions on Software Engineering December 1975, [http://basepath.com/aup/talks/SCCS-Slideshow.pdf The Source Code Control System]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
[1] http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf&lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19197</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19197"/>
		<updated>2009-09-15T19:22:58Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Distributed Version Control */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage data, especially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing changes are important for software engineers, since most of time they need to add, modify or fix a small portion of the code (also known as creating new version). Version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control] is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management  SCM]. Also  known  as  ''revision  control'', it acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows multiple  users  to  edit  the  same  document  at  the  same  time. This provides a  valuable  resource  to team  projects,   thereby enabling a  better  working  environment.  Keeping  records  of  all  changes  done to  a  set  of  information  provides  a  reliable  solution  to  data  management,  and  an  archive  for  future reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, he  can  ''checkout'' the  corresponding file  from  the  system,  thus getting access to  the  most  up‐to‐date  version  of  it.  Once  the  file  has  been  amended,  the  user  can  then  commit and  re‐submit the  file,  updating  the  copy  in  the  repository , ready  for  use by other users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and  &lt;br /&gt;
 checking-out.Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file&lt;br /&gt;
 revision from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
The basic purpose of a Version Control System was to maintain different versions of a file.&lt;br /&gt;
&lt;br /&gt;
Following are some issues requiring a Version Control System:&lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : While working in a team project it gets difficult to keep track of what changes are made in the code, why they are made and who made them. A VCS enables change tracking by documenting every change with all the requisite details.&lt;br /&gt;
* '''Reversion''' : At times changes in a particular code module can lead to the entire application failing during regression testing and calls for reversion to a code version that is known good. If reversion is difficult or unreliable, it's hard to risk making changes at all.&lt;br /&gt;
* '''Bug tracking''' : In an agile software development environment it's quite common to get new bug reports for a particular version after the code has mutated away from it considerably.But when the bug doesn't reproduce under the new version, it gets difficult to know whether it still exists or has been fixed already. Under such circumstances it calls for getting back to the older version of the code in order to reproduce and comprehend it.&lt;br /&gt;
* '''Concurrency''' : The ability to have many people across separate geographic locations modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''' : The ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
[[Image:History.jpg|650px|thumb|center| Milestone of version control development.]]&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when [http://en.wikipedia.org/wiki/Software_configuration_management Software  Configuration  Management SCM] became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System(SCCS)====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model where in only one person could check out and edit a file at one time.This led to serialized development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It worked  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a [http://en.wikipedia.org/wiki/Patch_(Unix) diff] or a [http://en.wikipedia.org/wiki/Patch_(Unix) patchfile].&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions.In forward deltas the origin version is stored, all subsequent versions are stored as sets of changes or deltas where as in backword deltas, the most recent version is stored, all previous versions are stored as set [http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf &amp;lt;sup&amp;gt;|1|&amp;lt;/sup&amp;gt;] Logically similar to [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS],it has a cleaner command interface and good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site[http://catb.org/esr/writings/taoup/html/ch15s05.html &amp;lt;sup&amp;gt;|2|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to [http://en.wikipedia.org/wiki/Concurrent_Versions_System  CVS]  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by [http://en.wikipedia.org/wiki/CollabNet CollabNet Inc.] Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.Distributed revision control took a peer-to-peer approach, as opposed to the client-server approach of centralized systems. The repository was split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  could  be  stored  on  servers  or  local  machines.This enabled every developer to edit his local sharable copy without having to connect to any network connection.Synchronization was conducted by exchanging patches (change-sets) from peer to peer.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized[http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/ &amp;lt;sup&amp;gt;|3|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems, to being a part of Wiki too. Whether a waterfall, spiral, iterative, agile or open source approach is used, improvements to VCS technology have a direct impact on collaboration effectiveness. Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===See Also===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 [3] Bryan O'Sullivan, ACM 2009, [http://portal.acm.org/citation.cfm?id=1594204.1595636&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=50565619&amp;amp;CFTOKEN=27688531 Making Sense of Revision-control Systems]&lt;br /&gt;
 &lt;br /&gt;
[4] Löh, A., Swierstra, W., Leijen, D. 2007, [http://people.cs.uu.nl/andres/VersionControl.html A principled approach to version control] &lt;br /&gt;
 &lt;br /&gt;
[5] Marc J. Rochkind, IEEE Transactions on Software Engineering December 1975, [http://basepath.com/aup/talks/SCCS-Slideshow.pdf The Source Code Control System]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
[1] http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf&lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19196</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19196"/>
		<updated>2009-09-15T19:18:52Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage data, especially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing changes are important for software engineers, since most of time they need to add, modify or fix a small portion of the code (also known as creating new version). Version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control] is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management  SCM]. Also  known  as  ''revision  control'', it acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows multiple  users  to  edit  the  same  document  at  the  same  time. This provides a  valuable  resource  to team  projects,   thereby enabling a  better  working  environment.  Keeping  records  of  all  changes  done to  a  set  of  information  provides  a  reliable  solution  to  data  management,  and  an  archive  for  future reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, he  can  ''checkout'' the  corresponding file  from  the  system,  thus getting access to  the  most  up‐to‐date  version  of  it.  Once  the  file  has  been  amended,  the  user  can  then  commit and  re‐submit the  file,  updating  the  copy  in  the  repository , ready  for  use by other users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and  &lt;br /&gt;
 checking-out.Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file&lt;br /&gt;
 revision from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
The basic purpose of a Version Control System was to maintain different versions of a file.&lt;br /&gt;
&lt;br /&gt;
Following are some issues requiring a Version Control System:&lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : While working in a team project it gets difficult to keep track of what changes are made in the code, why they are made and who made them. A VCS enables change tracking by documenting every change with all the requisite details.&lt;br /&gt;
* '''Reversion''' : At times changes in a particular code module can lead to the entire application failing during regression testing and calls for reversion to a code version that is known good. If reversion is difficult or unreliable, it's hard to risk making changes at all.&lt;br /&gt;
* '''Bug tracking''' : In an agile software development environment it's quite common to get new bug reports for a particular version after the code has mutated away from it considerably.But when the bug doesn't reproduce under the new version, it gets difficult to know whether it still exists or has been fixed already. Under such circumstances it calls for getting back to the older version of the code in order to reproduce and comprehend it.&lt;br /&gt;
* '''Concurrency''' : The ability to have many people across separate geographic locations modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''' : The ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
[[Image:History.jpg|650px|thumb|center| Milestone of version control development.]]&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when [http://en.wikipedia.org/wiki/Software_configuration_management Software  Configuration  Management SCM] became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System(SCCS)====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model where in only one person could check out and edit a file at one time.This led to serialized development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It worked  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a [http://en.wikipedia.org/wiki/Patch_(Unix) diff] or a [http://en.wikipedia.org/wiki/Patch_(Unix) patchfile].&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions.In forward deltas the origin version is stored, all subsequent versions are stored as sets of changes or deltas where as in backword deltas, the most recent version is stored, all previous versions are stored as set [http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf &amp;lt;sup&amp;gt;|1|&amp;lt;/sup&amp;gt;] Logically similar to [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS],it has a cleaner command interface and good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site[http://catb.org/esr/writings/taoup/html/ch15s05.html &amp;lt;sup&amp;gt;|2|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to [http://en.wikipedia.org/wiki/Concurrent_Versions_System  CVS]  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by [http://en.wikipedia.org/wiki/CollabNet CollabNet Inc.] Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository was split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  could  be  stored  on  servers  or  local  machines.This enabled every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized[http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/ &amp;lt;sup&amp;gt;|3|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems, to being a part of Wiki too. Whether a waterfall, spiral, iterative, agile or open source approach is used, improvements to VCS technology have a direct impact on collaboration effectiveness. Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===See Also===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 [3] Bryan O'Sullivan, ACM 2009, [http://portal.acm.org/citation.cfm?id=1594204.1595636&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=50565619&amp;amp;CFTOKEN=27688531 Making Sense of Revision-control Systems]&lt;br /&gt;
 &lt;br /&gt;
[4] Löh, A., Swierstra, W., Leijen, D. 2007, [http://people.cs.uu.nl/andres/VersionControl.html A principled approach to version control] &lt;br /&gt;
 &lt;br /&gt;
[5] Marc J. Rochkind, IEEE Transactions on Software Engineering December 1975, [http://basepath.com/aup/talks/SCCS-Slideshow.pdf The Source Code Control System]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
[1] http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf&lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19195</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19195"/>
		<updated>2009-09-15T18:57:52Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Change and Configuration Control (CCC) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage data, especially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing changes are important for software engineers, since most of time they need to add, modify or fix a small portion of the code (also known as creating new version). Version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control] is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management  SCM]. Also  known  as  ''revision  control'', it acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows multiple  users  to  edit  the  same  document  at  the  same  time. This provides a  valuable  resource  to team  projects,   thereby enabling a  better  working  environment.  Keeping  records  of  all  changes  done to  a  set  of  information  provides  a  reliable  solution  to  data  management,  and  an  archive  for  future reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, he  can  ''checkout'' the  corresponding file  from  the  system,  thus getting access to  the  most  up‐to‐date  version  of  it.  Once  the  file  has  been  amended,  the  user  can  then  commit and  re‐submit the  file,  updating  the  copy  in  the  repository , ready  for  use by other users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and  &lt;br /&gt;
 checking-out.Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file&lt;br /&gt;
 revision from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
The basic purpose of a Version Control System was to maintain different versions of a file.&lt;br /&gt;
&lt;br /&gt;
Following are some issues requiring a Version Control System:&lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : While working in a team project it gets difficult to keep track of what changes are made in the code, why they are made and who made them. A VCS enables change tracking by documenting every change with all the requisite details.&lt;br /&gt;
* '''Reversion''' : At times changes in a particular code module can lead to the entire application failing during regression testing and calls for reversion to a code version that is known good. If reversion is difficult or unreliable, it's hard to risk making changes at all.&lt;br /&gt;
* '''Bug tracking''' : In an agile software development environment it's quite common to get new bug reports for a particular version after the code has mutated away from it considerably.But when the bug doesn't reproduce under the new version, it gets difficult to know whether it still exists or has been fixed already. Under such circumstances it calls for getting back to the older version of the code in order to reproduce and comprehend it.&lt;br /&gt;
* '''Concurrency''' : The ability to have many people across separate geographic locations modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''' : The ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
[[Image:History.jpg|650px|thumb|center| Milestone of version control development.]]&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when [http://en.wikipedia.org/wiki/Software_configuration_management Software  Configuration  Management SCM] became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System(SCCS)====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model where in only one person could check out and edit a file at one time.This led to serialized development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It worked  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a [http://en.wikipedia.org/wiki/Patch_(Unix) diff] or a [http://en.wikipedia.org/wiki/Patch_(Unix) patchfile].&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions.In forward deltas the origin version is stored, all subsequent versions are stored as sets of changes or deltas where as in backword deltas, the most recent version is stored, all previous versions are stored as set [http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf &amp;lt;sup&amp;gt;|1|&amp;lt;/sup&amp;gt;] Logically similar to [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS],it has a cleaner command interface and good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site[http://catb.org/esr/writings/taoup/html/ch15s05.html &amp;lt;sup&amp;gt;|2|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to [http://en.wikipedia.org/wiki/Concurrent_Versions_System  CVS]  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by [http://en.wikipedia.org/wiki/CollabNet CollabNet Inc.] Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository was split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  could  be  stored  on  servers  or  local  machines.This enabled every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized[http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/ &amp;lt;sup&amp;gt;|3|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems, to being a part of Wiki too.Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===See Also===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 [3] Bryan O'Sullivan, ACM 2009, [http://portal.acm.org/citation.cfm?id=1594204.1595636&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=50565619&amp;amp;CFTOKEN=27688531 Making Sense of Revision-control Systems]&lt;br /&gt;
 &lt;br /&gt;
[4] Löh, A., Swierstra, W., Leijen, D. 2007, [http://people.cs.uu.nl/andres/VersionControl.html A principled approach to version control] &lt;br /&gt;
 &lt;br /&gt;
[5] Marc J. Rochkind, IEEE Transactions on Software Engineering December 1975, [http://basepath.com/aup/talks/SCCS-Slideshow.pdf The Source Code Control System]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
[1] http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf&lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19194</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19194"/>
		<updated>2009-09-15T18:52:24Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage data, especially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing changes are important for software engineers, since most of time they need to add, modify or fix a small portion of the code (also known as creating new version). Version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control] is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management  SCM]. Also  known  as  ''revision  control'', it acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows multiple  users  to  edit  the  same  document  at  the  same  time. This provides a  valuable  resource  to team  projects,   thereby enabling a  better  working  environment.  Keeping  records  of  all  changes  done to  a  set  of  information  provides  a  reliable  solution  to  data  management,  and  an  archive  for  future reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, he  can  ''checkout'' the  corresponding file  from  the  system,  thus getting access to  the  most  up‐to‐date  version  of  it.  Once  the  file  has  been  amended,  the  user  can  then  commit and  re‐submit the  file,  updating  the  copy  in  the  repository , ready  for  use by other users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and  &lt;br /&gt;
 checking-out.Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file&lt;br /&gt;
 revision from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
The basic purpose of a Version Control System was to maintain different versions of a file.&lt;br /&gt;
&lt;br /&gt;
Following are some issues requiring a Version Control System:&lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : While working in a team project it gets difficult to keep track of what changes are made in the code, why they are made and who made them. A VCS enables change tracking by documenting every change with all the requisite details.&lt;br /&gt;
* '''Reversion''' : At times changes in a particular code module can lead to the entire application failing during regression testing and calls for reversion to a code version that is known good. If reversion is difficult or unreliable, it's hard to risk making changes at all.&lt;br /&gt;
* '''Bug tracking''' : In an agile software development environment it's quite common to get new bug reports for a particular version after the code has mutated away from it considerably.But when the bug doesn't reproduce under the new version, it gets difficult to know whether it still exists or has been fixed already. Under such circumstances it calls for getting back to the older version of the code in order to reproduce and comprehend it.&lt;br /&gt;
* '''Concurrency''' : The ability to have many people across separate geographic locations modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''' : The ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
[[Image:History.jpg|650px|thumb|center| Milestone of version control development.]]&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management SCM] became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System(SCCS)====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model where in only one person could check out and edit a file at one time.This led to serialized development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It worked  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a [http://en.wikipedia.org/wiki/Patch_(Unix) diff] or a [http://en.wikipedia.org/wiki/Patch_(Unix) patchfile].&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions.In forward deltas the origin version is stored, all subsequent versions are stored as sets of changes or deltas where as in backword deltas, the most recent version is stored, all previous versions are stored as set [http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf &amp;lt;sup&amp;gt;|1|&amp;lt;/sup&amp;gt;] Logically similar to [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS],it has a cleaner command interface and good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site[http://catb.org/esr/writings/taoup/html/ch15s05.html &amp;lt;sup&amp;gt;|2|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to [http://en.wikipedia.org/wiki/Concurrent_Versions_System  CVS]  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by [http://en.wikipedia.org/wiki/CollabNet CollabNet Inc.] Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository was split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  could  be  stored  on  servers  or  local  machines.This enabled every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized[http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/ &amp;lt;sup&amp;gt;|3|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems, to being a part of Wiki too.Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===See Also===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 [3] Bryan O'Sullivan, ACM 2009, [http://portal.acm.org/citation.cfm?id=1594204.1595636&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=50565619&amp;amp;CFTOKEN=27688531 Making Sense of Revision-control Systems]&lt;br /&gt;
 &lt;br /&gt;
[4] Löh, A., Swierstra, W., Leijen, D. 2007, [http://people.cs.uu.nl/andres/VersionControl.html A principled approach to version control] &lt;br /&gt;
 &lt;br /&gt;
[5] Marc J. Rochkind, IEEE Transactions on Software Engineering December 1975, [http://basepath.com/aup/talks/SCCS-Slideshow.pdf The Source Code Control System]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
[1] http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf&lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19193</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19193"/>
		<updated>2009-09-15T18:39:08Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage data, especially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing changes are important for software engineers, since most of time they need to add, modify or fix a small portion of the code (also known as creating new version). Version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control] is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management  SCM]. Also  known  as  ''revision  control'', it acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allow multiple  users  to  edit  the  same  document  at  the  same  time. This provides a  valuable  resource  to the team  projects,  and  thereby enables a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  reliable  solution  to  data  management,  and  an  archive  for  future reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and  &lt;br /&gt;
 checking-out.Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file&lt;br /&gt;
 revision from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
The basic purpose of a Version Control System was to maintain different versions of a file.&lt;br /&gt;
&lt;br /&gt;
Following are some issues requiring a Version Control System:&lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : While working in a team project it gets difficult to keep track of what changes are made in the code, why they are made and who made them. A VCS enables change tracking by documenting every change with all the requisite details.&lt;br /&gt;
* '''Reversion''' : At times changes in a particular code module can lead to the entire application failing during regression testing and calls for reversion to a code version that is known good. If reversion is difficult or unreliable, it's hard to risk making changes at all.&lt;br /&gt;
* '''Bug tracking''' : In an agile software development environment it's quite common to get new bug reports for a particular version after the code has mutated away from it considerably.But when the bug doesn't reproduce under the new version, it gets difficult to know whether it still exists or has been fixed already. Under such circumstances it calls for getting back to the older version of the code in order to reproduce and comprehend it.&lt;br /&gt;
* '''Concurrency''' : The ability to have many people across separate geographic locations modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''' : The ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
[[Image:History.jpg|650px|thumb|center| Milestone of version control development.]]&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management SCM] became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System(SCCS)====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model where in only one person could check out and edit a file at one time.This led to serialized development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It worked  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a [http://en.wikipedia.org/wiki/Patch_(Unix) diff] or a [http://en.wikipedia.org/wiki/Patch_(Unix) patchfile].&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions.In forward deltas the origin version is stored, all subsequent versions are stored as sets of changes or deltas where as in backword deltas, the most recent version is stored, all previous versions are stored as set [http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf &amp;lt;sup&amp;gt;|1|&amp;lt;/sup&amp;gt;] Logically similar to [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS],it has a cleaner command interface and good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site[http://catb.org/esr/writings/taoup/html/ch15s05.html &amp;lt;sup&amp;gt;|2|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to [http://en.wikipedia.org/wiki/Concurrent_Versions_System  CVS]  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by [http://en.wikipedia.org/wiki/CollabNet CollabNet Inc.] Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository was split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  could  be  stored  on  servers  or  local  machines.This enabled every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized[http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/ &amp;lt;sup&amp;gt;|3|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems, to being a part of Wiki too.Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===See Also===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 [3] Bryan O'Sullivan, ACM 2009, [http://portal.acm.org/citation.cfm?id=1594204.1595636&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=50565619&amp;amp;CFTOKEN=27688531 Making Sense of Revision-control Systems]&lt;br /&gt;
 &lt;br /&gt;
[4] Löh, A., Swierstra, W., Leijen, D. 2007, [http://people.cs.uu.nl/andres/VersionControl.html A principled approach to version control] &lt;br /&gt;
 &lt;br /&gt;
[5] Marc J. Rochkind, IEEE Transactions on Software Engineering December 1975, [http://basepath.com/aup/talks/SCCS-Slideshow.pdf The Source Code Control System]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
[1] http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf&lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19192</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19192"/>
		<updated>2009-09-15T18:37:46Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage data, especially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing changes are important for software engineers, since most of time they need to add, modify or fix a small portion of the code (also known as creating new version). Version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control] is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management  SCM]. Also  known  as  ''revision  control'',it acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allow multiple  users  to  edit  the  same  document  at  the  same  time. This provides a  valuable  resource  to the team  projects,  and  thereby enables a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  reliable  solution  to  data  management,  and  an  archive  for  future reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and  &lt;br /&gt;
 checking-out.Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file&lt;br /&gt;
 revision from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
The basic purpose of a Version Control System was to maintain different versions of a file.&lt;br /&gt;
&lt;br /&gt;
Following are some issues requiring a Version Control System:&lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : While working in a team project it gets difficult to keep track of what changes are made in the code, why they are made and who made them. A VCS enables change tracking by documenting every change with all the requisite details.&lt;br /&gt;
* '''Reversion''' : At times changes in a particular code module can lead to the entire application failing during regression testing and calls for reversion to a code version that is known good. If reversion is difficult or unreliable, it's hard to risk making changes at all.&lt;br /&gt;
* '''Bug tracking''' : In an agile software development environment it's quite common to get new bug reports for a particular version after the code has mutated away from it considerably.But when the bug doesn't reproduce under the new version, it gets difficult to know whether it still exists or has been fixed already. Under such circumstances it calls for getting back to the older version of the code in order to reproduce and comprehend it.&lt;br /&gt;
* '''Concurrency''' : The ability to have many people across separate geographic locations modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''' : The ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
[[Image:History.jpg|650px|thumb|center| Milestone of version control development.]]&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management SCM] became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System(SCCS)====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model where in only one person could check out and edit a file at one time.This led to serialized development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It worked  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a [http://en.wikipedia.org/wiki/Patch_(Unix) diff] or a [http://en.wikipedia.org/wiki/Patch_(Unix) patchfile].&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions.In forward deltas the origin version is stored, all subsequent versions are stored as sets of changes or deltas where as in backword deltas, the most recent version is stored, all previous versions are stored as set [http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf &amp;lt;sup&amp;gt;|1|&amp;lt;/sup&amp;gt;] Logically similar to [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS],it has a cleaner command interface and good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site[http://catb.org/esr/writings/taoup/html/ch15s05.html &amp;lt;sup&amp;gt;|2|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to [http://en.wikipedia.org/wiki/Concurrent_Versions_System  CVS]  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by [http://en.wikipedia.org/wiki/CollabNet CollabNet Inc.] Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository was split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  could  be  stored  on  servers  or  local  machines.This enabled every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized[http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/ &amp;lt;sup&amp;gt;|3|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems, to being a part of Wiki too.Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===See Also===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 [3] Bryan O'Sullivan, ACM 2009, [http://portal.acm.org/citation.cfm?id=1594204.1595636&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=50565619&amp;amp;CFTOKEN=27688531 Making Sense of Revision-control Systems]&lt;br /&gt;
 &lt;br /&gt;
[4] Löh, A., Swierstra, W., Leijen, D. 2007, [http://people.cs.uu.nl/andres/VersionControl.html A principled approach to version control] &lt;br /&gt;
 &lt;br /&gt;
[5] Marc J. Rochkind, IEEE Transactions on Software Engineering December 1975, [http://basepath.com/aup/talks/SCCS-Slideshow.pdf The Source Code Control System]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
[1] http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf&lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19191</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19191"/>
		<updated>2009-09-15T18:35:19Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage data, especially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing changes are important for software engineers, since most of time they need to add, modify or fix a small portion of the code (also known as creating new version). Version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control] is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management  SCM], also  known  as  ''revision  control'' and acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allow multiple  users  to  edit  the  same  document  at  the  same  time. This provides a  valuable  resource  to the team  projects,  and  thereby enables a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  reliable  solution  to  data  management,  and  an  archive  for  future reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and  &lt;br /&gt;
 checking-out.Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file&lt;br /&gt;
 revision from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
The basic purpose of a Version Control System was to maintain different versions of a file.&lt;br /&gt;
&lt;br /&gt;
Following are some issues requiring a Version Control System:&lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : While working in a team project it gets difficult to keep track of what changes are made in the code, why they are made and who made them. A VCS enables change tracking by documenting every change with all the requisite details.&lt;br /&gt;
* '''Reversion''' : At times changes in a particular code module can lead to the entire application failing during regression testing and calls for reversion to a code version that is known good. If reversion is difficult or unreliable, it's hard to risk making changes at all.&lt;br /&gt;
* '''Bug tracking''' : In an agile software development environment it's quite common to get new bug reports for a particular version after the code has mutated away from it considerably.But when the bug doesn't reproduce under the new version, it gets difficult to know whether it still exists or has been fixed already. Under such circumstances it calls for getting back to the older version of the code in order to reproduce and comprehend it.&lt;br /&gt;
* '''Concurrency''' : The ability to have many people across separate geographic locations modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''' : The ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
[[Image:History.jpg|650px|thumb|center| Milestone of version control development.]]&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management SCM] became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System(SCCS)====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model where in only one person could check out and edit a file at one time.This led to serialized development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It worked  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a [http://en.wikipedia.org/wiki/Patch_(Unix) diff] or a [http://en.wikipedia.org/wiki/Patch_(Unix) patchfile].&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions.In forward deltas the origin version is stored, all subsequent versions are stored as sets of changes or deltas where as in backword deltas, the most recent version is stored, all previous versions are stored as set [http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf &amp;lt;sup&amp;gt;|1|&amp;lt;/sup&amp;gt;] Logically similar to [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS],it has a cleaner command interface and good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site[http://catb.org/esr/writings/taoup/html/ch15s05.html &amp;lt;sup&amp;gt;|2|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to [http://en.wikipedia.org/wiki/Concurrent_Versions_System  CVS]  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by [http://en.wikipedia.org/wiki/CollabNet CollabNet Inc.] Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository was split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  could  be  stored  on  servers  or  local  machines.This enabled every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized[http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/ &amp;lt;sup&amp;gt;|3|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems, to being a part of Wiki too.Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===See Also===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 [3] Bryan O'Sullivan, ACM 2009, [http://portal.acm.org/citation.cfm?id=1594204.1595636&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=50565619&amp;amp;CFTOKEN=27688531 Making Sense of Revision-control Systems]&lt;br /&gt;
 &lt;br /&gt;
[4] Löh, A., Swierstra, W., Leijen, D. 2007, [http://people.cs.uu.nl/andres/VersionControl.html A principled approach to version control] &lt;br /&gt;
 &lt;br /&gt;
[5] Marc J. Rochkind, IEEE Transactions on Software Engineering December 1975, [http://basepath.com/aup/talks/SCCS-Slideshow.pdf The Source Code Control System]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
[1] http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf&lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19190</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19190"/>
		<updated>2009-09-15T18:33:47Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage data, especially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as creating new version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control] is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management  SCM], also  known  as  ''revision  control'' and acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allow multiple  users  to  edit  the  same  document  at  the  same  time. This provides a  valuable  resource  to the team  projects,  and  thereby enables a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  reliable  solution  to  data  management,  and  an  archive  for  future reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and  &lt;br /&gt;
 checking-out.Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file&lt;br /&gt;
 revision from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
The basic purpose of a Version Control System was to maintain different versions of a file.&lt;br /&gt;
&lt;br /&gt;
Following are some issues requiring a Version Control System:&lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : While working in a team project it gets difficult to keep track of what changes are made in the code, why they are made and who made them. A VCS enables change tracking by documenting every change with all the requisite details.&lt;br /&gt;
* '''Reversion''' : At times changes in a particular code module can lead to the entire application failing during regression testing and calls for reversion to a code version that is known good. If reversion is difficult or unreliable, it's hard to risk making changes at all.&lt;br /&gt;
* '''Bug tracking''' : In an agile software development environment it's quite common to get new bug reports for a particular version after the code has mutated away from it considerably.But when the bug doesn't reproduce under the new version, it gets difficult to know whether it still exists or has been fixed already. Under such circumstances it calls for getting back to the older version of the code in order to reproduce and comprehend it.&lt;br /&gt;
* '''Concurrency''' : The ability to have many people across separate geographic locations modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''' : The ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
[[Image:History.jpg|650px|thumb|center| Milestone of version control development.]]&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management SCM] became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System(SCCS)====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model where in only one person could check out and edit a file at one time.This led to serialized development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It worked  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a [http://en.wikipedia.org/wiki/Patch_(Unix) diff] or a [http://en.wikipedia.org/wiki/Patch_(Unix) patchfile].&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions.In forward deltas the origin version is stored, all subsequent versions are stored as sets of changes or deltas where as in backword deltas, the most recent version is stored, all previous versions are stored as set [http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf &amp;lt;sup&amp;gt;|1|&amp;lt;/sup&amp;gt;] Logically similar to [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS],it has a cleaner command interface and good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site[http://catb.org/esr/writings/taoup/html/ch15s05.html &amp;lt;sup&amp;gt;|2|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to [http://en.wikipedia.org/wiki/Concurrent_Versions_System  CVS]  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by [http://en.wikipedia.org/wiki/CollabNet CollabNet Inc.] Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository was split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  could  be  stored  on  servers  or  local  machines.This enabled every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized[http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/ &amp;lt;sup&amp;gt;|3|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems, to being a part of Wiki too.Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===See Also===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 [3] Bryan O'Sullivan, ACM 2009, [http://portal.acm.org/citation.cfm?id=1594204.1595636&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=50565619&amp;amp;CFTOKEN=27688531 Making Sense of Revision-control Systems]&lt;br /&gt;
 &lt;br /&gt;
[4] Löh, A., Swierstra, W., Leijen, D. 2007, [http://people.cs.uu.nl/andres/VersionControl.html A principled approach to version control] &lt;br /&gt;
 &lt;br /&gt;
[5] Marc J. Rochkind, IEEE Transactions on Software Engineering December 1975, [http://basepath.com/aup/talks/SCCS-Slideshow.pdf The Source Code Control System]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
[1] http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf&lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19149</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19149"/>
		<updated>2009-09-13T22:24:38Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage the data, specially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as creating new version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control] is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management  SCM], also  known  as  ''revision  control'' and acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allow multiple  users  to  edit  the  same  document  at  the  same  time. This provides a  valuable  resource  to the team  projects,  and  thereby enables a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  reliable  solution  to  data  management,  and  an  archive  for  future reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and  &lt;br /&gt;
 checking-out.Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file&lt;br /&gt;
 revision from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
The basic purpose of a Version Control System was to maintain different versions of a file.&lt;br /&gt;
&lt;br /&gt;
Following are some issues requiring a Version Control System:&lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : While working in a team project it gets difficult to keep track of what changes are made in the code, why they are made and who made them. A VCS enables change tracking by documenting every change with all the requisite details.&lt;br /&gt;
* '''Reversion''' : At times changes in a particular code module can lead to the entire application failing during regression testing and calls for reversion to a code version that is known good. If reversion is difficult or unreliable, it's hard to risk making changes at all.&lt;br /&gt;
* '''Bug tracking''' : In an agile software development environment it's quite common to get new bug reports for a particular version after the code has mutated away from it considerably.But when the bug doesn't reproduce under the new version, it gets difficult to know whether it still exists or has been fixed already. Under such circumstances it calls for getting back to the older version of the code in order to reproduce and comprehend it.&lt;br /&gt;
* '''Concurrency''' : The ability to have many people across separate geographic locations modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''' : The ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
[[Image:History.jpg|650px|thumb|center| Milestone of version control development.]]&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management SCM] became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System(SCCS)====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model where in only one person could check out and edit a file at one time.This led to serialized development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It worked  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a [http://en.wikipedia.org/wiki/Patch_(Unix) diff] or a [http://en.wikipedia.org/wiki/Patch_(Unix) patchfile].&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions.In forward deltas the origin version is stored, all subsequent versions are stored as sets of changes or deltas where as in backword deltas, the most recent version is stored, all previous versions are stored as set [http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf &amp;lt;sup&amp;gt;|1|&amp;lt;/sup&amp;gt;] Logically similar to [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS],it has a cleaner command interface and good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site[http://catb.org/esr/writings/taoup/html/ch15s05.html &amp;lt;sup&amp;gt;|2|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to [http://en.wikipedia.org/wiki/Concurrent_Versions_System  CVS]  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by [http://en.wikipedia.org/wiki/CollabNet CollabNet Inc.] Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository was split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  could  be  stored  on  servers  or  local  machines.This enabled every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized[http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/ &amp;lt;sup&amp;gt;|3|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems, to being a part of Wiki too.Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===See Also===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 [3] Bryan O'Sullivan, ACM 2009, [http://portal.acm.org/citation.cfm?id=1594204.1595636&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=50565619&amp;amp;CFTOKEN=27688531 Making Sense of Revision-control Systems]&lt;br /&gt;
 &lt;br /&gt;
[4] Löh, A., Swierstra, W., Leijen, D. 2007, [http://people.cs.uu.nl/andres/VersionControl.html A principled approach to version control] &lt;br /&gt;
 &lt;br /&gt;
[5] Marc J. Rochkind, IEEE Transactions on Software Engineering December 1975, [http://basepath.com/aup/talks/SCCS-Slideshow.pdf The Source Code Control System]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
[1] http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf&lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19148</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19148"/>
		<updated>2009-09-13T22:23:58Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage the data, specially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as creating new version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control] is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management  SCM], also  known  as  ''revision  control'' and acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allow multiple  users  to  edit  the  same  document  at  the  same  time. This provides a  valuable  resource  to the team  projects,  and  thereby enables a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  reliable  solution  to  data  management,  and  an  archive  for  future reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and  &lt;br /&gt;
 checking-out.Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file&lt;br /&gt;
 revision from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
The basic purpose of a Version Control System was to maintain different versions of a file.&lt;br /&gt;
&lt;br /&gt;
Following are some issues requiring a Version Control System:&lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : While working in a team project it gets difficult to keep track of what changes are made in the code, why they are made and who made them. A VCS enables change tracking by documenting every change with all the requisite details.&lt;br /&gt;
* '''Reversion''' : At times changes in a particular code module can lead to the entire application failing during regression testing and calls for reversion to a code version that is known good. If reversion is difficult or unreliable, it's hard to risk making changes at all.&lt;br /&gt;
* '''Bug tracking''' : In an agile software development environment it's quite common to get new bug reports for a particular version after the code has mutated away from it considerably.But when the bug doesn't reproduce under the new version, it gets difficult to know whether it still exists or has been fixed already. Under such circumstances it calls for getting back to the older version of the code in order to reproduce and comprehend it.&lt;br /&gt;
* '''Concurrency''' : The ability to have many people across separate geographic locations modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''' : The ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
[[Image:History.jpg|650px|thumb|center| Milestone of version control development.]]&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management SCM] became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System(SCCS)====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model where in only one person could check out and edit a file at one time.This led to serialized development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It worked  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a [http://en.wikipedia.org/wiki/Patch_(Unix) diff] or a [http://en.wikipedia.org/wiki/Patch_(Unix) patchfile].&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions.In forward deltas the origin version is stored, all subsequent versions are stored as sets of changes or deltas where as in backword deltas, the most recent version is stored, all previous versions are stored as set [http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf &amp;lt;sup&amp;gt;|1|&amp;lt;/sup&amp;gt;] Logically similar to [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS],it has a cleaner command interface and good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site[http://catb.org/esr/writings/taoup/html/ch15s05.html &amp;lt;sup&amp;gt;|2|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to [http://en.wikipedia.org/wiki/Concurrent_Versions_System  CVS]  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by [http://en.wikipedia.org/wiki/CollabNet CollabNet Inc.] Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository was split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  could  be  stored  on  servers  or  local  machines.This enabled every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized[http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/ &amp;lt;sup&amp;gt;|3|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems, to being a part of Wiki too.Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===See Also===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 [3] Bryan O'Sullivan, ACM 2009, [http://portal.acm.org/citation.cfm?id=1594204.1595636&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=50565619&amp;amp;CFTOKEN=27688531 Making Sense of Revision-control Systems]&lt;br /&gt;
 &lt;br /&gt;
[4] Löh, A., Swierstra, W., Leijen, D. 2007, [http://people.cs.uu.nl/andres/VersionControl.html A principled approach to version control] &lt;br /&gt;
 &lt;br /&gt;
[5] Marc J. Rochkind, IEEE Transactions on Software Engineering December 1975, [http://basepath.com/aup/talks/SCCS-Slideshow.pdf The Source Code Control System]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
[1] http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf&lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19065</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=19065"/>
		<updated>2009-09-12T04:11:51Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage the data, specially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as creating new version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control] is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management  SCM], also  known  as  ''revision  control'' and acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allow multiple  users  to  edit  the  same  document  at  the  same  time. This provides a  valuable  resource  to the team  projects,  and  thereby enables a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  reliable  solution  to  data  management,  and  an  archive  for  future reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and  &lt;br /&gt;
 checking-out.Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file&lt;br /&gt;
 revision from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
The basic purpose of a Version Control System was to maintain different versions of a file.&lt;br /&gt;
&lt;br /&gt;
Following are some issues requiring a Version Control System:&lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : While working in a team project it gets difficult to keep track of what changes are made in the code, why they are made and who made them. A VCS enables change tracking by documenting every change with all the requisite details.&lt;br /&gt;
* '''Reversion''' : At times changes in a particular code module can lead to the entire application failing during regression testing and calls for reversion to a code version that is known good. If reversion is difficult or unreliable, it's hard to risk making changes at all.&lt;br /&gt;
* '''Bug tracking''' : In an agile software development environment it's quite common to get new bug reports for a particular version after the code has mutated away from it considerably.But when the bug doesn't reproduce under the new version, it gets difficult to know whether it still exists or has been fixed already. Under such circumstances it calls for getting back to the older version of the code in order to reproduce and comprehend it.&lt;br /&gt;
* '''Concurrency''' : The ability to have many people across separate geographic locations modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''' : The ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
[[Image:History.jpg|650px|thumb|center| Milestone of version control development.]]&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management SCM] became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System(SCCS)====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model where in only one person could check out and edit a file at one time.This led to serialized development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It worked  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a [http://en.wikipedia.org/wiki/Patch_(Unix) diff] or a [http://en.wikipedia.org/wiki/Patch_(Unix) patchfile].&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions.In forward deltas the origin version is stored, all subsequent versions are stored as sets of changes or deltas where as in backword deltas, the most recent version is stored, all previous versions are stored as set [http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf &amp;lt;sup&amp;gt;|1|&amp;lt;/sup&amp;gt;] Logically similar to [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS],it has a cleaner command interface and good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site[http://catb.org/esr/writings/taoup/html/ch15s05.html &amp;lt;sup&amp;gt;|2|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to [http://en.wikipedia.org/wiki/Concurrent_Versions_System  CVS]  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by [http://en.wikipedia.org/wiki/CollabNet CollabNet Inc.] Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository was split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  could  be  stored  on  servers  or  local  machines.This enabled every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized[http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/ &amp;lt;sup&amp;gt;|3|&amp;lt;/sup&amp;gt;].&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems, to being a part of Wiki too.Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===See Also===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 [3] Bryan O'Sullivan, ACM 2009, [http://portal.acm.org/citation.cfm?id=1594204.1595636&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=50565619&amp;amp;CFTOKEN=27688531 Making Sense of Revision-control Systems]&lt;br /&gt;
 &lt;br /&gt;
[4] Löh, A., Swierstra, W., Leijen, D. 2007, [http://people.cs.uu.nl/andres/VersionControl.html A principled approach to version control] &lt;br /&gt;
 &lt;br /&gt;
[5] Marc J. Rochkind, IEEE Transactions on Software Engineering December 1975, [http://basepath.com/aup/talks/SCCS-Slideshow.pdf The Source Code Control System]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
[1] http://www.cs.colorado.edu/~kena/classes/3308/f03/lectures/lecture12.pdf&lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/    &lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18673</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18673"/>
		<updated>2009-09-08T13:15:34Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage the data, specially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing the changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Revision_control Version control]'',  also  known  as  ''revision  control'',  is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management] (SCM), and  acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows  for  multiple  users  to  edit  the  same  document  at  the  same  time,  providing  a  valuable  resource  for  team  projects,  and  enabling  a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  fail‐safe  solution  to  data  management,  and  an  archive  for  subsequent  reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and&lt;br /&gt;
 checking-out. Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file revision&lt;br /&gt;
 from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
&lt;br /&gt;
Following were some of reasons version control was developed to address . &lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : It's easy to forget the reasons for changes and step on them later. If you have collaborators on a project, how do you know what they have changed while you weren't looking, and who was responsible for each change?&lt;br /&gt;
* '''Reversion''' : If you make a change, and discover it's not viable, how can you revert to a code version that is known good? If reversion is difficult or unreliable, it's hard to risk making changes at all (you could trash the whole project, or make many hours of painful work for yourself).&lt;br /&gt;
*  '''Bug tracking''' :  It's quite common to get new bug reports for a particular version after the code has mutated away from it considerably. Sometimes you can recognize immediately that the bug has already been stomped, but often you can't. Suppose it doesn't reproduce under the new version. How do you get back the state of the code for the old version in order to reproduce and understand it?&lt;br /&gt;
* '''Concurrency''': the ability to have many people modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''': the ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when Software Configuration Management(SCM) became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System([http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS])====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model to serialize development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It works  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a diff or a patchfile.&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions. Logically similar to SCCS,it has a cleaner command interface good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site.&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to  CVS  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in  CVS eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by CollabNet Inc. Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository is split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  can  be  stored  on  servers  or  local  machines.This enables every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized.&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems to being a part of Wiki too.Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Useful Seminal Papers===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 [3] Bryan O'Sullivan, ACM 2009, [http://portal.acm.org/citation.cfm?id=1594204.1595636&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=50565619&amp;amp;CFTOKEN=27688531 Making Sense of Revision-control Systems]&lt;br /&gt;
 &lt;br /&gt;
[4] Löh, A., Swierstra, W., Leijen, D. 2007, [http://people.cs.uu.nl/andres/VersionControl.html A principled approach to version control] &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===External links===&lt;br /&gt;
&lt;br /&gt;
[1] http://agave.garden.org/~aaronh/rcs/manual/html/ch05.html  &lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18652</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18652"/>
		<updated>2009-09-08T05:40:41Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage the data, specially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing the changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Revision_control Version control]'',  also  known  as  ''revision  control'',  is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management] (SCM), and  acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows  for  multiple  users  to  edit  the  same  document  at  the  same  time,  providing  a  valuable  resource  for  team  projects,  and  enabling  a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  fail‐safe  solution  to  data  management,  and  an  archive  for  subsequent  reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and&lt;br /&gt;
 checking-out. Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file revision&lt;br /&gt;
 from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
&lt;br /&gt;
Following were some of reasons version control was developed to address . &lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : It's easy to forget the reasons for changes and step on them later. If you have collaborators on a project, how do you know what they have changed while you weren't looking, and who was responsible for each change?&lt;br /&gt;
* '''Reversion''' : If you make a change, and discover it's not viable, how can you revert to a code version that is known good? If reversion is difficult or unreliable, it's hard to risk making changes at all (you could trash the whole project, or make many hours of painful work for yourself).&lt;br /&gt;
*  '''Bug tracking''' :  It's quite common to get new bug reports for a particular version after the code has mutated away from it considerably. Sometimes you can recognize immediately that the bug has already been stomped, but often you can't. Suppose it doesn't reproduce under the new version. How do you get back the state of the code for the old version in order to reproduce and understand it?&lt;br /&gt;
* '''Concurrency''': the ability to have many people modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''': the ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when Software Configuration Management(SCM) became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System([http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS])====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model to serialize development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It works  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a diff or a patchfile.&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions. Logically similar to SCCS,it has a cleaner command interface good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site.&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to  CVS  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in  CVS eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by CollabNet Inc. Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository is split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  can  be  stored  on  servers  or  local  machines.This enables every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized.&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems to being a part of Wiki too.Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== References===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 [3] Bryan O'Sullivan, ACM 2009, [http://portal.acm.org/citation.cfm?id=1594204.1595636&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=50565619&amp;amp;CFTOKEN=27688531 Making Sense of Revision-control Systems]&lt;br /&gt;
 &lt;br /&gt;
[4] Löh, A., Swierstra, W., Leijen, D. 2007, [http://people.cs.uu.nl/andres/VersionControl.html A principled approach to version control] &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===External links===&lt;br /&gt;
&lt;br /&gt;
[1] http://agave.garden.org/~aaronh/rcs/manual/html/ch05.html  &lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18651</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18651"/>
		<updated>2009-09-08T05:37:51Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage the data, specially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing the changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Revision_control Version control]'',  also  known  as  ''revision  control'',  is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management] (SCM), and  acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows  for  multiple  users  to  edit  the  same  document  at  the  same  time,  providing  a  valuable  resource  for  team  projects,  and  enabling  a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  fail‐safe  solution  to  data  management,  and  an  archive  for  subsequent  reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and&lt;br /&gt;
 checking-out. Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file revision&lt;br /&gt;
 from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
&lt;br /&gt;
Following were some of reasons version control was developed to address . &lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : It's easy to forget the reasons for changes and step on them later. If you have collaborators on a project, how do you know what they have changed while you weren't looking, and who was responsible for each change?&lt;br /&gt;
* '''Reversion''' : If you make a change, and discover it's not viable, how can you revert to a code version that is known good? If reversion is difficult or unreliable, it's hard to risk making changes at all (you could trash the whole project, or make many hours of painful work for yourself).&lt;br /&gt;
*  '''Bug tracking''' :  It's quite common to get new bug reports for a particular version after the code has mutated away from it considerably. Sometimes you can recognize immediately that the bug has already been stomped, but often you can't. Suppose it doesn't reproduce under the new version. How do you get back the state of the code for the old version in order to reproduce and understand it?&lt;br /&gt;
* '''Concurrency''': the ability to have many people modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''': the ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when Software Configuration Management(SCM) became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System([http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS])====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model to serialize development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It works  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a diff or a patchfile.&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions. Logically similar to SCCS,it has a cleaner command interface good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site.&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to  CVS  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in  CVS eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by CollabNet Inc. Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository is split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  can  be  stored  on  servers  or  local  machines.This enables every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized.&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems to being a part of Wiki too.Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== References===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 [3] Bryan O'Sullivan, ACM 2009 [http://portal.acm.org/citation.cfm?id=1594204.1595636&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=50565619&amp;amp;CFTOKEN=27688531 Making Sense of Revision-control Systems]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===External links===&lt;br /&gt;
&lt;br /&gt;
[1] http://agave.garden.org/~aaronh/rcs/manual/html/ch05.html  &lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18650</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18650"/>
		<updated>2009-09-08T05:37:42Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage the data, specially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing the changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Revision_control Version control]'',  also  known  as  ''revision  control'',  is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management] (SCM), and  acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows  for  multiple  users  to  edit  the  same  document  at  the  same  time,  providing  a  valuable  resource  for  team  projects,  and  enabling  a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  fail‐safe  solution  to  data  management,  and  an  archive  for  subsequent  reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and&lt;br /&gt;
 checking-out. Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file revision&lt;br /&gt;
 from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
&lt;br /&gt;
Following were some of reasons version control was developed to address . &lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : It's easy to forget the reasons for changes and step on them later. If you have collaborators on a project, how do you know what they have changed while you weren't looking, and who was responsible for each change?&lt;br /&gt;
* '''Reversion''' : If you make a change, and discover it's not viable, how can you revert to a code version that is known good? If reversion is difficult or unreliable, it's hard to risk making changes at all (you could trash the whole project, or make many hours of painful work for yourself).&lt;br /&gt;
*  '''Bug tracking''' :  It's quite common to get new bug reports for a particular version after the code has mutated away from it considerably. Sometimes you can recognize immediately that the bug has already been stomped, but often you can't. Suppose it doesn't reproduce under the new version. How do you get back the state of the code for the old version in order to reproduce and understand it?&lt;br /&gt;
* '''Concurrency''': the ability to have many people modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''': the ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when Software Configuration Management(SCM) became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System([http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS])====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model to serialize development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It works  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a diff or a patchfile.&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions. Logically similar to SCCS,it has a cleaner command interface good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site.&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to  CVS  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in  CVS eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by CollabNet Inc. Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository is split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  can  be  stored  on  servers  or  local  machines.This enables every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized.&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems to being a part of Wiki too.Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== References===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 [3]Bryan O'Sullivan, ACM 2009 [http://portal.acm.org/citation.cfm?id=1594204.1595636&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=50565619&amp;amp;CFTOKEN=27688531 Making Sense of Revision-control Systems]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===External links===&lt;br /&gt;
&lt;br /&gt;
[1] http://agave.garden.org/~aaronh/rcs/manual/html/ch05.html  &lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18649</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18649"/>
		<updated>2009-09-08T05:37:30Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage the data, specially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing the changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Revision_control Version control]'',  also  known  as  ''revision  control'',  is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management] (SCM), and  acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows  for  multiple  users  to  edit  the  same  document  at  the  same  time,  providing  a  valuable  resource  for  team  projects,  and  enabling  a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  fail‐safe  solution  to  data  management,  and  an  archive  for  subsequent  reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and&lt;br /&gt;
 checking-out. Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file revision&lt;br /&gt;
 from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
&lt;br /&gt;
Following were some of reasons version control was developed to address . &lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : It's easy to forget the reasons for changes and step on them later. If you have collaborators on a project, how do you know what they have changed while you weren't looking, and who was responsible for each change?&lt;br /&gt;
* '''Reversion''' : If you make a change, and discover it's not viable, how can you revert to a code version that is known good? If reversion is difficult or unreliable, it's hard to risk making changes at all (you could trash the whole project, or make many hours of painful work for yourself).&lt;br /&gt;
*  '''Bug tracking''' :  It's quite common to get new bug reports for a particular version after the code has mutated away from it considerably. Sometimes you can recognize immediately that the bug has already been stomped, but often you can't. Suppose it doesn't reproduce under the new version. How do you get back the state of the code for the old version in order to reproduce and understand it?&lt;br /&gt;
* '''Concurrency''': the ability to have many people modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''': the ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when Software Configuration Management(SCM) became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System([http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS])====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model to serialize development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It works  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a diff or a patchfile.&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions. Logically similar to SCCS,it has a cleaner command interface good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site.&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to  CVS  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in  CVS eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by CollabNet Inc. Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository is split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  can  be  stored  on  servers  or  local  machines.This enables every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized.&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems to being a part of Wiki too.Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== References===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 [3]Bryan O'Sullivan, ACM 2009 [http://portal.acm.org/citation.cfm?id=1594204.1595636&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=50565619&amp;amp;CFTOKEN=27688531 Making Sense of Revision-control Systems]&lt;br /&gt;
]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===External links===&lt;br /&gt;
&lt;br /&gt;
[1] http://agave.garden.org/~aaronh/rcs/manual/html/ch05.html  &lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18648</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18648"/>
		<updated>2009-09-08T05:37:18Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage the data, specially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing the changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Revision_control Version control]'',  also  known  as  ''revision  control'',  is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management] (SCM), and  acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows  for  multiple  users  to  edit  the  same  document  at  the  same  time,  providing  a  valuable  resource  for  team  projects,  and  enabling  a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  fail‐safe  solution  to  data  management,  and  an  archive  for  subsequent  reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and&lt;br /&gt;
 checking-out. Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file revision&lt;br /&gt;
 from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
&lt;br /&gt;
Following were some of reasons version control was developed to address . &lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : It's easy to forget the reasons for changes and step on them later. If you have collaborators on a project, how do you know what they have changed while you weren't looking, and who was responsible for each change?&lt;br /&gt;
* '''Reversion''' : If you make a change, and discover it's not viable, how can you revert to a code version that is known good? If reversion is difficult or unreliable, it's hard to risk making changes at all (you could trash the whole project, or make many hours of painful work for yourself).&lt;br /&gt;
*  '''Bug tracking''' :  It's quite common to get new bug reports for a particular version after the code has mutated away from it considerably. Sometimes you can recognize immediately that the bug has already been stomped, but often you can't. Suppose it doesn't reproduce under the new version. How do you get back the state of the code for the old version in order to reproduce and understand it?&lt;br /&gt;
* '''Concurrency''': the ability to have many people modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''': the ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when Software Configuration Management(SCM) became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System([http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS])====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model to serialize development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It works  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a diff or a patchfile.&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions. Logically similar to SCCS,it has a cleaner command interface good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site.&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to  CVS  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in  CVS eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by CollabNet Inc. Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository is split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  can  be  stored  on  servers  or  local  machines.This enables every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized.&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems to being a part of Wiki too.Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== References===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 [3]Bryan O'Sullivan, ACM 2009 [http://portal.acm.org/citation.cfm?id=1594204.1595636&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=50565619&amp;amp;CFTOKEN=27688531 Making Sense of Revision-control Systems&lt;br /&gt;
]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===External links===&lt;br /&gt;
&lt;br /&gt;
[1] http://agave.garden.org/~aaronh/rcs/manual/html/ch05.html  &lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18645</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18645"/>
		<updated>2009-09-08T05:29:41Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Big Shift in Paradigm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage the data, specially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing the changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Revision_control Version control]'',  also  known  as  ''revision  control'',  is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management] (SCM), and  acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows  for  multiple  users  to  edit  the  same  document  at  the  same  time,  providing  a  valuable  resource  for  team  projects,  and  enabling  a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  fail‐safe  solution  to  data  management,  and  an  archive  for  subsequent  reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and&lt;br /&gt;
 checking-out. Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file revision&lt;br /&gt;
 from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
&lt;br /&gt;
Following were some of reasons version control was developed to address . &lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : It's easy to forget the reasons for changes and step on them later. If you have collaborators on a project, how do you know what they have changed while you weren't looking, and who was responsible for each change?&lt;br /&gt;
* '''Reversion''' : If you make a change, and discover it's not viable, how can you revert to a code version that is known good? If reversion is difficult or unreliable, it's hard to risk making changes at all (you could trash the whole project, or make many hours of painful work for yourself).&lt;br /&gt;
*  '''Bug tracking''' :  It's quite common to get new bug reports for a particular version after the code has mutated away from it considerably. Sometimes you can recognize immediately that the bug has already been stomped, but often you can't. Suppose it doesn't reproduce under the new version. How do you get back the state of the code for the old version in order to reproduce and understand it?&lt;br /&gt;
* '''Concurrency''': the ability to have many people modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''': the ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when Software Configuration Management(SCM) became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System([http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS])====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model to serialize development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It works  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a diff or a patchfile.&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions. Logically similar to SCCS,it has a cleaner command interface good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site.&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to  CVS  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in  CVS eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by CollabNet Inc. Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository is split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  can  be  stored  on  servers  or  local  machines.This enables every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized.&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems to being a part of Wiki too.Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== References===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===External links===&lt;br /&gt;
&lt;br /&gt;
[1] http://agave.garden.org/~aaronh/rcs/manual/html/ch05.html  &lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18644</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18644"/>
		<updated>2009-09-08T05:29:18Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Big Shift in Paradigm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage the data, specially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing the changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Revision_control Version control]'',  also  known  as  ''revision  control'',  is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management] (SCM), and  acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows  for  multiple  users  to  edit  the  same  document  at  the  same  time,  providing  a  valuable  resource  for  team  projects,  and  enabling  a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  fail‐safe  solution  to  data  management,  and  an  archive  for  subsequent  reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and&lt;br /&gt;
 checking-out. Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file revision&lt;br /&gt;
 from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
&lt;br /&gt;
Following were some of reasons version control was developed to address . &lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : It's easy to forget the reasons for changes and step on them later. If you have collaborators on a project, how do you know what they have changed while you weren't looking, and who was responsible for each change?&lt;br /&gt;
* '''Reversion''' : If you make a change, and discover it's not viable, how can you revert to a code version that is known good? If reversion is difficult or unreliable, it's hard to risk making changes at all (you could trash the whole project, or make many hours of painful work for yourself).&lt;br /&gt;
*  '''Bug tracking''' :  It's quite common to get new bug reports for a particular version after the code has mutated away from it considerably. Sometimes you can recognize immediately that the bug has already been stomped, but often you can't. Suppose it doesn't reproduce under the new version. How do you get back the state of the code for the old version in order to reproduce and understand it?&lt;br /&gt;
* '''Concurrency''': the ability to have many people modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''': the ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when Software Configuration Management(SCM) became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System([http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS])====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model to serialize development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It works  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a diff or a patchfile.&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions. Logically similar to SCCS,it has a cleaner command interface good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site.&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to  CVS  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in  CVS eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by CollabNet Inc. Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository is split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  can  be  stored  on  servers  or  local  machines.This enables every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported as all operations occur through a connection to a centralized server.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#More flexible as, as they allow many different types of workflows, from a classic centralized workflow, to a purely ad hoc, to a mixture of ad hoc and centralized&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems to being a part of Wiki too.Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== References===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===External links===&lt;br /&gt;
&lt;br /&gt;
[1] http://agave.garden.org/~aaronh/rcs/manual/html/ch05.html  &lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18643</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18643"/>
		<updated>2009-09-08T05:23:09Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* External links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage the data, specially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing the changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Revision_control Version control]'',  also  known  as  ''revision  control'',  is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management] (SCM), and  acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows  for  multiple  users  to  edit  the  same  document  at  the  same  time,  providing  a  valuable  resource  for  team  projects,  and  enabling  a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  fail‐safe  solution  to  data  management,  and  an  archive  for  subsequent  reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and&lt;br /&gt;
 checking-out. Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file revision&lt;br /&gt;
 from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
&lt;br /&gt;
Following were some of reasons version control was developed to address . &lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : It's easy to forget the reasons for changes and step on them later. If you have collaborators on a project, how do you know what they have changed while you weren't looking, and who was responsible for each change?&lt;br /&gt;
* '''Reversion''' : If you make a change, and discover it's not viable, how can you revert to a code version that is known good? If reversion is difficult or unreliable, it's hard to risk making changes at all (you could trash the whole project, or make many hours of painful work for yourself).&lt;br /&gt;
*  '''Bug tracking''' :  It's quite common to get new bug reports for a particular version after the code has mutated away from it considerably. Sometimes you can recognize immediately that the bug has already been stomped, but often you can't. Suppose it doesn't reproduce under the new version. How do you get back the state of the code for the old version in order to reproduce and understand it?&lt;br /&gt;
* '''Concurrency''': the ability to have many people modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''': the ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when Software Configuration Management(SCM) became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System([http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS])====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model to serialize development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It works  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a diff or a patchfile.&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions. Logically similar to SCCS,it has a cleaner command interface good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site.&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to  CVS  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in  CVS eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by CollabNet Inc. Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository is split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  can  be  stored  on  servers  or  local  machines.This enables every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems to being a part of Wiki too.Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== References===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===External links===&lt;br /&gt;
&lt;br /&gt;
[1] http://agave.garden.org/~aaronh/rcs/manual/html/ch05.html  &lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
[3] http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18635</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18635"/>
		<updated>2009-09-08T04:52:09Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Big Shift in Paradigm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage the data, specially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing the changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Revision_control Version control]'',  also  known  as  ''revision  control'',  is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management] (SCM), and  acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows  for  multiple  users  to  edit  the  same  document  at  the  same  time,  providing  a  valuable  resource  for  team  projects,  and  enabling  a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  fail‐safe  solution  to  data  management,  and  an  archive  for  subsequent  reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and&lt;br /&gt;
 checking-out. Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file revision&lt;br /&gt;
 from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
&lt;br /&gt;
Following were some of reasons version control was developed to address . &lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : It's easy to forget the reasons for changes and step on them later. If you have collaborators on a project, how do you know what they have changed while you weren't looking, and who was responsible for each change?&lt;br /&gt;
* '''Reversion''' : If you make a change, and discover it's not viable, how can you revert to a code version that is known good? If reversion is difficult or unreliable, it's hard to risk making changes at all (you could trash the whole project, or make many hours of painful work for yourself).&lt;br /&gt;
*  '''Bug tracking''' :  It's quite common to get new bug reports for a particular version after the code has mutated away from it considerably. Sometimes you can recognize immediately that the bug has already been stomped, but often you can't. Suppose it doesn't reproduce under the new version. How do you get back the state of the code for the old version in order to reproduce and understand it?&lt;br /&gt;
* '''Concurrency''': the ability to have many people modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''': the ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when Software Configuration Management(SCM) became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System([http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS])====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model to serialize development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It works  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a diff or a patchfile.&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions. Logically similar to SCCS,it has a cleaner command interface good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site.&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to  CVS  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in  CVS eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by CollabNet Inc. Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository is split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  can  be  stored  on  servers  or  local  machines.This enables every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
Detailed explanation of the two models with an analogy can be found [http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems to being a part of Wiki too.Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== References===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===External links===&lt;br /&gt;
&lt;br /&gt;
[1] http://agave.garden.org/~aaronh/rcs/manual/html/ch05.html  &lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18634</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18634"/>
		<updated>2009-09-08T04:49:36Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage the data, specially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing the changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Revision_control Version control]'',  also  known  as  ''revision  control'',  is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management] (SCM), and  acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows  for  multiple  users  to  edit  the  same  document  at  the  same  time,  providing  a  valuable  resource  for  team  projects,  and  enabling  a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  fail‐safe  solution  to  data  management,  and  an  archive  for  subsequent  reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and&lt;br /&gt;
 checking-out. Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file revision&lt;br /&gt;
 from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
&lt;br /&gt;
Following were some of reasons version control was developed to address . &lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : It's easy to forget the reasons for changes and step on them later. If you have collaborators on a project, how do you know what they have changed while you weren't looking, and who was responsible for each change?&lt;br /&gt;
* '''Reversion''' : If you make a change, and discover it's not viable, how can you revert to a code version that is known good? If reversion is difficult or unreliable, it's hard to risk making changes at all (you could trash the whole project, or make many hours of painful work for yourself).&lt;br /&gt;
*  '''Bug tracking''' :  It's quite common to get new bug reports for a particular version after the code has mutated away from it considerably. Sometimes you can recognize immediately that the bug has already been stomped, but often you can't. Suppose it doesn't reproduce under the new version. How do you get back the state of the code for the old version in order to reproduce and understand it?&lt;br /&gt;
* '''Concurrency''': the ability to have many people modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''': the ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when Software Configuration Management(SCM) became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System([http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS])====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model to serialize development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It works  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a diff or a patchfile.&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions. Logically similar to SCCS,it has a cleaner command interface good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site.&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to  CVS  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in  CVS eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by CollabNet Inc. Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository is split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  can  be  stored  on  servers  or  local  machines.This enables every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [http://en.wikipedia.org/wiki/Word_processor word processors] (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Writer OpenOffice.org Writer], [http://en.wikipedia.org/wiki/Microsoft_Word Microsoft Word], [http://en.wikipedia.org/wiki/KOffice KOffice], [http://en.wikipedia.org/wiki/Pages Pages], [http://en.wikipedia.org/wiki/Google_Docs Google Docs]), spreadsheets (e.g. [http://en.wikipedia.org/wiki/OpenOffice.org_Calc OpenOffice.org Calc], [http://en.wikipedia.org/wiki/Google_Spreadsheets Google Spreadsheets], [http://en.wikipedia.org/wiki/Microsoft_Excel Microsoft Excel]), and in various content management systems to being a part of Wiki too.Overall it can be said that versioning systems are powerful development management tools that provide security, eﬃciency and most importantly an asynchronous platform for software development.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== References===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===External links===&lt;br /&gt;
&lt;br /&gt;
[1] http://agave.garden.org/~aaronh/rcs/manual/html/ch05.html  &lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18632</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18632"/>
		<updated>2009-09-08T04:43:42Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage the data, specially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing the changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Revision_control Version control]'',  also  known  as  ''revision  control'',  is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management] (SCM), and  acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows  for  multiple  users  to  edit  the  same  document  at  the  same  time,  providing  a  valuable  resource  for  team  projects,  and  enabling  a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  fail‐safe  solution  to  data  management,  and  an  archive  for  subsequent  reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and&lt;br /&gt;
 checking-out. Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file revision&lt;br /&gt;
 from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
&lt;br /&gt;
Following were some of reasons version control was developed to address . &lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : It's easy to forget the reasons for changes and step on them later. If you have collaborators on a project, how do you know what they have changed while you weren't looking, and who was responsible for each change?&lt;br /&gt;
* '''Reversion''' : If you make a change, and discover it's not viable, how can you revert to a code version that is known good? If reversion is difficult or unreliable, it's hard to risk making changes at all (you could trash the whole project, or make many hours of painful work for yourself).&lt;br /&gt;
*  '''Bug tracking''' :  It's quite common to get new bug reports for a particular version after the code has mutated away from it considerably. Sometimes you can recognize immediately that the bug has already been stomped, but often you can't. Suppose it doesn't reproduce under the new version. How do you get back the state of the code for the old version in order to reproduce and understand it?&lt;br /&gt;
* '''Concurrency''': the ability to have many people modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''': the ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when Software Configuration Management(SCM) became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System([http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS])====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model to serialize development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It works  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a diff or a patchfile.&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions. Logically similar to SCCS,it has a cleaner command interface good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site.&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to  CVS  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in  CVS eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by CollabNet Inc. Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository is split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  can  be  stored  on  servers  or  local  machines.This enables every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [word processors] (e.g. [OpenOffice.org Writer], [Microsoft Word], [[KOffice]], Pages, Google Docs), spreadsheets (e.g. OpenOffice.org Calc, Google Spreadsheets, Microsoft Excel), and in various content management systems&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== References===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===External links===&lt;br /&gt;
&lt;br /&gt;
[1] http://agave.garden.org/~aaronh/rcs/manual/html/ch05.html  &lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18631</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18631"/>
		<updated>2009-09-08T04:42:46Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage the data, specially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing the changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Revision_control Version control]'',  also  known  as  ''revision  control'',  is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management] (SCM), and  acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows  for  multiple  users  to  edit  the  same  document  at  the  same  time,  providing  a  valuable  resource  for  team  projects,  and  enabling  a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  fail‐safe  solution  to  data  management,  and  an  archive  for  subsequent  reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and&lt;br /&gt;
 checking-out. Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file revision&lt;br /&gt;
 from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
&lt;br /&gt;
Following were some of reasons version control was developed to address . &lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : It's easy to forget the reasons for changes and step on them later. If you have collaborators on a project, how do you know what they have changed while you weren't looking, and who was responsible for each change?&lt;br /&gt;
* '''Reversion''' : If you make a change, and discover it's not viable, how can you revert to a code version that is known good? If reversion is difficult or unreliable, it's hard to risk making changes at all (you could trash the whole project, or make many hours of painful work for yourself).&lt;br /&gt;
*  '''Bug tracking''' :  It's quite common to get new bug reports for a particular version after the code has mutated away from it considerably. Sometimes you can recognize immediately that the bug has already been stomped, but often you can't. Suppose it doesn't reproduce under the new version. How do you get back the state of the code for the old version in order to reproduce and understand it?&lt;br /&gt;
* '''Concurrency''': the ability to have many people modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''': the ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when Software Configuration Management(SCM) became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System([http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS])====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model to serialize development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It works  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a diff or a patchfile.&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions. Logically similar to SCCS,it has a cleaner command interface good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site.&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to  CVS  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in  CVS eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by CollabNet Inc. Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository is split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  can  be  stored  on  servers  or  local  machines.This enables every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [[word processors]] (e.g. [[OpenOffice.org Writer]], Microsoft Word, KOffice, Pages, Google Docs), spreadsheets (e.g. OpenOffice.org Calc, Google Spreadsheets, Microsoft Excel), and in various content management systems&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== References===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===External links===&lt;br /&gt;
&lt;br /&gt;
[1] http://agave.garden.org/~aaronh/rcs/manual/html/ch05.html  &lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18630</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18630"/>
		<updated>2009-09-08T04:40:56Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Big Shift in Paradigm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage the data, specially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing the changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Revision_control Version control]'',  also  known  as  ''revision  control'',  is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management] (SCM), and  acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows  for  multiple  users  to  edit  the  same  document  at  the  same  time,  providing  a  valuable  resource  for  team  projects,  and  enabling  a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  fail‐safe  solution  to  data  management,  and  an  archive  for  subsequent  reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and&lt;br /&gt;
 checking-out. Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file revision&lt;br /&gt;
 from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
&lt;br /&gt;
Following were some of reasons version control was developed to address . &lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : It's easy to forget the reasons for changes and step on them later. If you have collaborators on a project, how do you know what they have changed while you weren't looking, and who was responsible for each change?&lt;br /&gt;
* '''Reversion''' : If you make a change, and discover it's not viable, how can you revert to a code version that is known good? If reversion is difficult or unreliable, it's hard to risk making changes at all (you could trash the whole project, or make many hours of painful work for yourself).&lt;br /&gt;
*  '''Bug tracking''' :  It's quite common to get new bug reports for a particular version after the code has mutated away from it considerably. Sometimes you can recognize immediately that the bug has already been stomped, but often you can't. Suppose it doesn't reproduce under the new version. How do you get back the state of the code for the old version in order to reproduce and understand it?&lt;br /&gt;
* '''Concurrency''': the ability to have many people modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''': the ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when Software Configuration Management(SCM) became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System([http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS])====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model to serialize development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It works  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a diff or a patchfile.&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions. Logically similar to SCCS,it has a cleaner command interface good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site.&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to  CVS  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in  CVS eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by CollabNet Inc. Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository is split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  can  be  stored  on  servers  or  local  machines.This enables every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Conclusion===&lt;br /&gt;
Version Control is becoming a standard with most areas in the computer arena from being embedded into various types of softwares like [[word processor]]s (e.g. [[OpenOffice.org Writer]], [[Microsoft Word]], [[KOffice]], [[Pages]], [[Google Docs]]), spreadsheets (e.g. [[OpenOffice.org Calc]], [[Google Spreadsheets]], [[Microsoft Excel]]), and in various [[content management system]]s&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== References===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===External links===&lt;br /&gt;
&lt;br /&gt;
[1] http://agave.garden.org/~aaronh/rcs/manual/html/ch05.html  &lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18628</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18628"/>
		<updated>2009-09-08T04:29:12Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Solution to these */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage the data, specially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing the changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Revision_control Version control]'',  also  known  as  ''revision  control'',  is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management] (SCM), and  acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows  for  multiple  users  to  edit  the  same  document  at  the  same  time,  providing  a  valuable  resource  for  team  projects,  and  enabling  a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  fail‐safe  solution  to  data  management,  and  an  archive  for  subsequent  reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and&lt;br /&gt;
 checking-out. Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file revision&lt;br /&gt;
 from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
&lt;br /&gt;
Following were some of reasons version control was developed to address . &lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : It's easy to forget the reasons for changes and step on them later. If you have collaborators on a project, how do you know what they have changed while you weren't looking, and who was responsible for each change?&lt;br /&gt;
* '''Reversion''' : If you make a change, and discover it's not viable, how can you revert to a code version that is known good? If reversion is difficult or unreliable, it's hard to risk making changes at all (you could trash the whole project, or make many hours of painful work for yourself).&lt;br /&gt;
*  '''Bug tracking''' :  It's quite common to get new bug reports for a particular version after the code has mutated away from it considerably. Sometimes you can recognize immediately that the bug has already been stomped, but often you can't. Suppose it doesn't reproduce under the new version. How do you get back the state of the code for the old version in order to reproduce and understand it?&lt;br /&gt;
* '''Concurrency''': the ability to have many people modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''': the ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when Software Configuration Management(SCM) became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System([http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS])====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model to serialize development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It works  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a diff or a patchfile.&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions. Logically similar to SCCS,it has a cleaner command interface good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site.&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to  CVS  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in  CVS eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by CollabNet Inc. Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository is split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  can  be  stored  on  servers  or  local  machines.This enables every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== References===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===External links===&lt;br /&gt;
&lt;br /&gt;
[1] http://agave.garden.org/~aaronh/rcs/manual/html/ch05.html  &lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18627</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18627"/>
		<updated>2009-09-08T04:28:49Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Why it was necessary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage the data, specially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing the changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Revision_control Version control]'',  also  known  as  ''revision  control'',  is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management] (SCM), and  acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows  for  multiple  users  to  edit  the  same  document  at  the  same  time,  providing  a  valuable  resource  for  team  projects,  and  enabling  a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  fail‐safe  solution  to  data  management,  and  an  archive  for  subsequent  reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and&lt;br /&gt;
 checking-out. Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file revision&lt;br /&gt;
 from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
&lt;br /&gt;
Following were some of reasons version control was developed to address . &lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : It's easy to forget the reasons for changes and step on them later. If you have collaborators on a project, how do you know what they have changed while you weren't looking, and who was responsible for each change?&lt;br /&gt;
* '''Reversion''' : If you make a change, and discover it's not viable, how can you revert to a code version that is known good? If reversion is difficult or unreliable, it's hard to risk making changes at all (you could trash the whole project, or make many hours of painful work for yourself).&lt;br /&gt;
*  '''Bug tracking''' :  It's quite common to get new bug reports for a particular version after the code has mutated away from it considerably. Sometimes you can recognize immediately that the bug has already been stomped, but often you can't. Suppose it doesn't reproduce under the new version. How do you get back the state of the code for the old version in order to reproduce and understand it?&lt;br /&gt;
* '''Concurrency''': the ability to have many people modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''': the ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when Software Configuration Management(SCM) became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System([http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS])====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model to serialize development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It works  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a diff or a patchfile.&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions. Logically similar to SCCS,it has a cleaner command interface good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site.&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to  CVS  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in  CVS eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by CollabNet Inc. Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository is split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  can  be  stored  on  servers  or  local  machines.This enables every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Solution to these===&lt;br /&gt;
&lt;br /&gt;
How they solved these problem.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== References===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===External links===&lt;br /&gt;
&lt;br /&gt;
[1] http://agave.garden.org/~aaronh/rcs/manual/html/ch05.html  &lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18626</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 5 History of version control by av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av&amp;diff=18626"/>
		<updated>2009-09-08T04:26:49Z</updated>

		<summary type="html">&lt;p&gt;Afouzda: /* Change in Paradigm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''[http://en.wikipedia.org/wiki/Revision_control Version control]'' is a [http://en.wikipedia.org/wiki/Utility_software software utility] used to manage the data, specially ''source code'', within a [http://en.wikipedia.org/wiki/Software_development software development] environment. Managing the changes are important for software engineers, since during most of time they need to add, modify or fix a small portion of the code (also known as version). And version control does the housekeeping of the changes by providing  a  detailed  history  of each document .  ''[http://en.wikipedia.org/wiki/Revision_control Version control]''  implements  several  techniques  to  ensure  the  integrity of  the  information,  while  making  use  of  minimal  resources.  This is a comprehensive list of  [http://en.wikipedia.org/wiki/List_of_revision_control_software version control software].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Revision_control Version control]'',  also  known  as  ''revision  control'',  is  a  fundamental  part  of  [http://en.wikipedia.org/wiki/Software_configuration_management software  configuration  management] (SCM), and  acts  as  a  key  lifeline  in  a  team  environment. Version  control  works  by  keeping  a  record  of  every  unit  of  information  and  tracks  the  changes  and  updates  made.  &lt;br /&gt;
&lt;br /&gt;
It also  allows  for  multiple  users  to  edit  the  same  document  at  the  same  time,  providing  a  valuable  resource  for  team  projects,  and  enabling  a  better  working  environment.  Keeping  records  of  all  changes  to  a  set  of  information  provides  a  fail‐safe  solution  to  data  management,  and  an  archive  for  subsequent  reference.  &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Version control]  works  by  uniquely  identifying  each  piece  of  information  and  recording  the  changes  with  it.  The  information  is  stored  in  a  data repository,  an  information  database,  and  can  be  accessed  remotely  or  locally  depending  on  the  type  of  system.  When  a  user  is  required  to  make  changes  to  a  document, they  can  ''checkout'' the  information  from  the  system, giving  them  the  most  up‐to‐date  version  of  the  file  in  their  working  copy .  Once  the  file  has  been  amended,  the  user  can  then  commit ,  re‐submit,  the  file  updating  the  copy  in  the  repository  ready  for  use simple  concept,  there  are  many  problems  such  as  revision  storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; While file systems provide operations like open, save, rename and delete, version control systems provide checking-in and&lt;br /&gt;
 checking-out. Like their file system counterparts checking-in stores a file version, and checking-out retrieves a file revision&lt;br /&gt;
 from the system.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:Svn.png|650px|thumb|center|A typical history of a file version in [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN].]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; is the main copy of a project on which development progresses. Team members create 	&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt; (Similar to fork) from the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt; and work on that copy.This provides the flexibility to modify the document in parallel along both &amp;lt;span style=&amp;quot;color: #FFCC33 &amp;quot;&amp;gt; '''branches''' &amp;lt;/span&amp;gt;. At the end changes are &amp;lt;span style=&amp;quot;color: #FF0000 &amp;quot;&amp;gt; '''merged''' &amp;lt;/span&amp;gt; to the &amp;lt;span style=&amp;quot;color: #33FF00&amp;quot;&amp;gt; '''Trunk''' &amp;lt;/span&amp;gt;, and this process continues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
====Issues Version Control addressed====&lt;br /&gt;
&lt;br /&gt;
Following were some of reasons version control was developed to address . &lt;br /&gt;
&lt;br /&gt;
* '''Change tracking''' : It's easy to forget the reasons for changes and step on them later. If you have collaborators on a project, how do you know what they have changed while you weren't looking, and who was responsible for each change?&lt;br /&gt;
* '''Reversion''' : If you make a change, and discover it's not viable, how can you revert to a code version that is known good? If reversion is difficult or unreliable, it's hard to risk making changes at all (you could trash the whole project, or make many hours of painful work for yourself).&lt;br /&gt;
*  '''Bug tracking''' :  It's quite common to get new bug reports for a particular version after the code has mutated away from it considerably. Sometimes you can recognize immediately that the bug has already been stomped, but often you can't. Suppose it doesn't reproduce under the new version. How do you get back the state of the code for the old version in order to reproduce and understand it?&lt;br /&gt;
* '''Concurrency''': the ability to have many people modifying the same collection of files knowing that conflicting modifications can be detected and resolved.&lt;br /&gt;
* '''History''': the ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
====Change and Configuration Control (CCC)====&lt;br /&gt;
The history of Version control dates back to 1975 when Software Configuration Management(SCM) became commerical for the first time with the advent of CCC,which was developed by the SoftTool Corporation.CCC offered a central repository and provided a trunkery system that documented every change thus enhancing the accountability of the system and validity of the information stored.The changes were recorded as they occured,at regular intervals, during development and maintenance and at baseline release.&lt;br /&gt;
&lt;br /&gt;
====Source Code Control System([http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS])====&lt;br /&gt;
Then came the [http://en.wikipedia.org/wiki/Source_Code_Control_System SCCS] which was developed by M. J Rochkind in the very early 1970’s. Designed basically for a unix system, it provided a simple locking model to serialize development.Based on a central repository it used the notion of discrete delta to record changes which were combined and  reconstructed to produce the final version of the product.&lt;br /&gt;
&lt;br /&gt;
====Diff Algorithm====&lt;br /&gt;
The  [http://en.wikipedia.org/wiki/Diff diff  algorithm ]  was developed  by  AT&amp;amp;T  [http://en.wikipedia.org/wiki/Bell_Labs Bell  Labs]  in  1974,  and  prototyped  by  James  W.  Hunt  in  1976.   It works  by  finding  the  [http://en.wikipedia.org/wiki/Longest_common_subsequence_problem longest  common  subsequence],  then  comparing  the  data  preceding and  following it, incorporating the changes in a diff or a patchfile.&lt;br /&gt;
&lt;br /&gt;
====Revsion Control System(RCS)====&lt;br /&gt;
In the early 1980’s Walter Tichy introduced the [http://en.wikipedia.org/wiki/Revision_Control_System RCS]. [http://en.wikipedia.org/wiki/Revision_Control_System RCS] introduced both forward and reverse delta concepts for efficient storage of different file revisions. Logically similar to SCCS,it has a cleaner command interface good facilities for grouping together entire project releases under symbolic names.It is well suited for single-developer or small-group projects hosted at a single development site.&lt;br /&gt;
&lt;br /&gt;
====Concurrent Version System(CVS)====&lt;br /&gt;
Next came the [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] designed and originally  implemented by Dick Grunein 1986 and then modified  by Berliner et al in 1990. It became the defacto standard within the open soure community for many years because it didn't require files to be locked while checked out, reconciliating non-conflicting changes mechanically and requesting human intervention on conflicts. One  notable  drawback  to  CVS  was  that  it  didn't support versioning of re-named or relocated material identifying them as new files instead of new versions.&lt;br /&gt;
&lt;br /&gt;
====Subversion(SVN)====&lt;br /&gt;
Perceived shortcomings and faults in  CVS eventually led to a new version control system called [http://en.wikipedia.org/wiki/Subversion_(software) SVN] around 2001.It was developed by CollabNet Inc. Unlike [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS], [http://en.wikipedia.org/wiki/Subversion_(software) SVN]  committed changes atomically and significantly had better support for branches.&lt;br /&gt;
&lt;br /&gt;
====Distributed Version Control====&lt;br /&gt;
The paradigm then shifted from client server architecture to a [http://en.wikipedia.org/wiki/Distributed_revision_control distributed system] around 2001, with the development of systems like [http://en.wikipedia.org/wiki/SVK SVK], [http://en.wikipedia.org/wiki/BitKeeper Bitkeeper], [http://en.wikipedia.org/wiki/Mercurial_(software) Mercurial], [http://en.wikipedia.org/wiki/GNU_arch GNU Arch], [http://en.wikipedia.org/wiki/Darcs DARCS], [http://en.wikipedia.org/wiki/Git_(software) GIT], [http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar], [http://en.wikipedia.org/wiki/Monotone_(software) monotone], [http://en.wikipedia.org/wiki/Codeville codeville], [http://en.wikipedia.org/wiki/Vesta_(Software_configuration_management) Vesta] , [http://en.wikipedia.org/wiki/Aegis_(management_software) Aegis] and many more.In all these the repository is split into several s sub‐repositories  for  each  section  or  module  of  a  project. The  sub‐repositories  can  be  stored  on  servers  or  local  machines.This enables every developer to edit his local sharable copy without having to connect to any network connection.&lt;br /&gt;
&lt;br /&gt;
A detailed comparision of all the Version Control Systems till date can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Big Shift in Paradigm===&lt;br /&gt;
The traditional Version Control Systems were based on a Client Server Model. It is a simple and easy to use model that uses a central repository that is accessible to all the users allowing them  to get an up-to-date version instantly. It works for backup, undo and synchronization but has the following drawbacks:&lt;br /&gt;
#Branching and Merging is cumbersome.Users have to manually track revisions between merged branches.&lt;br /&gt;
#Peer to Peer synchronization is not supported.&lt;br /&gt;
#Offline commits is not supported.&lt;br /&gt;
#Data back up is not adequate as there is a single repository.&lt;br /&gt;
#Performance is slow.&lt;br /&gt;
&lt;br /&gt;
In order to overcome the drawbacks inherent in the Centralized Model,most of the recent Version Control Systems adopted a Distributed model that has several clones of the main repository, each downloaded to a local machine for use by a single user, instead of a single repository.It offers the following advantages-&lt;br /&gt;
#Provides the users unlimited access to the repository even when they are not connected to the network.&lt;br /&gt;
#Supports Peer to Peer Synchronization as the users rely on a group of users rather than a central entity.&lt;br /&gt;
#It has better merging and branching capabilities.&lt;br /&gt;
#Information is more secure as each local repository acts as a backup of the central repository.&lt;br /&gt;
#Speed of execution of commands as well as viewing  transaction and error reports is fast as no network connection is involved.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Solution to these===&lt;br /&gt;
&lt;br /&gt;
How they solved these problem.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Why it was necessary===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== References===&lt;br /&gt;
[1] Vincenzo Ambriola, Lars Bendix and Paolo Ciancarini , Software Engineering Journal November 1990  [http://bneal.co.uk/papers/version_control.pdf The evolution of configuration management and version control]&lt;br /&gt;
&lt;br /&gt;
[2] Benjamin  Neal,ECM 3406  Dissertation 11th  December  2008  , [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=61744&amp;amp;isnumber=2248 Version  Control:An  Overview]  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===External links===&lt;br /&gt;
&lt;br /&gt;
[1] http://agave.garden.org/~aaronh/rcs/manual/html/ch05.html  &lt;br /&gt;
&lt;br /&gt;
[2] http://catb.org/esr/writings/taoup/html/ch15s05.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Afouzda</name></author>
	</entry>
</feed>