<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Principia &#187; Version Control</title>
	<atom:link href="http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/version-control/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.principia-it.co.uk</link>
	<description>Power from Simplicity</description>
	<lastBuildDate>Wed, 08 Feb 2012 21:29:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.principia-it.co.uk' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/6f78c9f4917c134dd89eb02c5ec6e5d8?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Principia &#187; Version Control</title>
		<link>http://blog.principia-it.co.uk</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.principia-it.co.uk/osd.xml" title="Principia" />
	<atom:link rel='hub' href='http://blog.principia-it.co.uk/?pushpress=hub'/>
		<item>
		<title>CM discussion group</title>
		<link>http://blog.principia-it.co.uk/2011/02/17/cm-discussion-group/</link>
		<comments>http://blog.principia-it.co.uk/2011/02/17/cm-discussion-group/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 17:19:08 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[Body of Knowledge]]></category>
		<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[ITSLM]]></category>
		<category><![CDATA[Parallel Development Principles]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[Version Control]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=844</guid>
		<description><![CDATA[At the end of last year I ran an experimental &#8216;live discussion&#8217; under the banner &#8216;The Watercooler&#8217;. This was intended to help spark conversation with the hope of encouraging people of all abilities to contribute to the body of knowledge wiki. Given the modest success of that experimental session, I have planned a series of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=844&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>At the end of last year I ran an experimental &#8216;live discussion&#8217; under the banner &#8216;The Watercooler&#8217;. This was intended to help spark conversation with the hope of encouraging people of all abilities to contribute to the <a href="http://itslmbok.com/wiki">body of knowledge wiki</a>. </p>
<p>Given the modest success of that experimental session, I have planned a series of similar events (details can be found <a href="http://www.principia-it.co.uk/community/upcoming-events">here</a>). </p>
<p>Currently planned are:</p>
<ul>
<li>&#8220;What is a configuration Item?&#8221; &#8211; Friday 4th March 2011</li>
<li>&#8220;Version control for beginners&#8221; &#8211; Friday 18th March 2011</li>
<li>&#8220;Branching. What, when, and how&#8221; &#8211; Thursday 31st March 2011</li>
<li>&#8220;Parallel development. What, when and how&#8221; &#8211; Friday 15th April 2011</li>
<li>&#8220;Selling configuration management&#8221; &#8211; Friday 29th April 2011</li>
</ul>
<p>All meetings are free to attend and are currently planned for 20:00GMT (There really is no good time that covers all time-zones. If enough people ask I may repeat meetings at other times to cover other timezones—better yet, why not organise one yourself <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  .)</p>
<p>I&#8217;ll certainly be chatting for half an hour at least (if no one else steps up to contribute I can certainly talk about any of these topics for at least that long <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ) but I&#8217;ve allowed two hours for each session and am happy for sessions roll on beyond this if there is enough interest.</p>
<p>These are informal discussion groups intended for any level of expertise (although obviously some are aimed primarily at beginners I would welcome input from experienced users too). I will probably make some opening remarks to get things rolling, but I am hoping enough people are interested to make for some real discussion.</p>
<p>You can contribute through the text &#8216;chat&#8217; on the site or better yet if you have a mic (and video camera if you like) you can step up and present your ideas that way.</p>
<p>Come along if you have questions, are just interested in the topic, or have something to say on the topic being discussed.</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/itslm/body-of-knowledge/'>Body of Knowledge</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/'>Configuration Management</a>, <a href='http://blog.principia-it.co.uk/category/itslm/'>ITSLM</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/parallel-development-principles/'>Parallel Development Principles</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/'>Software Configuration Management</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/version-control/'>Version Control</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/844/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/844/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/844/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/844/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/principiait.wordpress.com/844/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/principiait.wordpress.com/844/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/principiait.wordpress.com/844/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/principiait.wordpress.com/844/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/844/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/844/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/844/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/844/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/844/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/844/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=844&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2011/02/17/cm-discussion-group/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>
	</item>
		<item>
		<title>When is a change a change?</title>
		<link>http://blog.principia-it.co.uk/2010/06/12/when-is-a-change-a-change/</link>
		<comments>http://blog.principia-it.co.uk/2010/06/12/when-is-a-change-a-change/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 17:27:04 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[Build Management]]></category>
		<category><![CDATA[Change Management]]></category>
		<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[Version Control]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[CM]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[SCM]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=624</guid>
		<description><![CDATA[A change can be viewed in two ways; conceptually or literally. What I mean by this distinction is that when I say the requested change is to &#8220;correct spelling mistakes in the poem&#8221; I am specifying conceptually what the change is to achieve (and after the fact, what the change achieved). On the other hand [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=624&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A change can be viewed in two ways; conceptually or literally. What I mean by this distinction is that when I say the requested change is to &#8220;correct spelling mistakes in the poem&#8221; I am specifying conceptually what the change is to achieve (and after the fact, what the change achieved). On the other hand we are used to dealing with change in a more literal sense of as set of revisions, for example, &#8220;I edited file1 in this change&#8221;. In this post I discuss some of the issues and implications of these two views of change.<span id="more-624"></span></p>
<p>Let&#8217;s put this into concrete terms.</p>
<p>Suppose the original change request is something like, &#8220;correct the spelling mistakes in the poem&#8221; and the poem is held in two files. </p>
<p><span class="code">file1.txt</span> contains the following text.<br />
<pre class="brush: plain;">Mary hard a litl lamb,
It's fles was wite as snow,</pre></p>
<p>And <span class="code">file2.txt</span> contains the following text.<br />
<pre class="brush: plain;">And everywere that Mary went,
That lam was sure to go.</pre></p>
<p>&nbsp;</p>
<p>We correct these two file to the following using a change record <span class="code">CR1</span>.<br />
<pre class="brush: plain;">Mary hard a little lamb.
It's fleece was white as snow</pre><br />
And<br />
<pre class="brush: plain;">And everywhere that Mary went,
That lamb was sure to go.</pre></p>
<p>&nbsp;</p>
<p>Here then is my first build (<span class="code">build1</span>).<br />
<div id="attachment_742" class="wp-caption aligncenter" style="width: 310px"><a href="http://principiait.files.wordpress.com/2010/06/buildintegrity.png"><img src="http://principiait.files.wordpress.com/2010/06/buildintegrity.png?w=300&#038;h=266" alt="" title="Initial build" width="300" height="266" class="size-medium wp-image-742" /></a><p class="wp-caption-text">Initial build: conceptual and literal change equivalent</p></div><br />
This build has integrity because it contains the content of all valid changes nominated to the build as <em>known at the time the build was constructed</em>, but it is not correct because <span class="code">CR1</span> fails to satisfy the original request to &#8220;correct the spelling mistakes in the poem&#8221;.</p>
<p>So, not bad, but the still have &#8220;hard&#8221; instead of &#8220;had&#8221; in the first line of <span class="code">file1.txt</span>. This does not change the integrity of <span class="code">build1</span>, but does make another build (<span class="code">build2</span>) necessary to include a correction to the erroneous work submitted into <span class="code">build1</span>. </p>
<p>There are different ways we might choose to track the correction of the defect arising from <span class="code">build1</span>.</p>
<table class="wit indent">
<tbody>
<tr>
<td>Reuse&nbsp;CR1</td>
<td>
<p>Regress <span class="code">CR1</span> to a lifecycle state where the developer can add to it. Allow changes to be associated with <span class="code">CR1</span>, and then resubmit <span class="code">CR1</span> into a new build.</p>
<p>This approach, while simple, may be misleading. When revisiting <span class="code">build1</span> we need to be sure that we look at <span class="code">CR1</span> as it was when the build was executed, not as it is after the correction is applied. This can make metrics collection unnecessarily complex.</p>
</td>
</tr>
<tr>
<td>Create a new&nbsp;change</td>
<td>
<p>Treat the defect resolution as a separate change. This could be a new change or a special &#8216;defect&#8217; record.</p>
<p>This has the benefit of keeping track of the revisions that correct the defect in the original change separate to the original change. A feature potentially useful in simplifying metrics collection.</p>
</td>
</tr>
<tr>
<td>Create a separate but subsidiary change</td>
<td>
<p>We create a separate change record to track the specific revisions created to correct the defect, but we relate it to the original change request in a child-parent relationship (the original change being the parent.</p>
<p>This has the benefit of keeping track of the specific revisions that correct the defect while maintaining a link to the original change.</p>
</td>
</tr>
</tbody>
</table>
<p>Each approach has its own merits but, from the perspective of build integrity, they share an the important feature; when dealing with the conceptual change &#8220;correct the spelling mistakes in the poem&#8221;, they are semantically equivalent. For <span class="code">build2</span> to have integrity it must include both the revisions associated with the original change and all new revisions associated with the correction to the change, regardless of how that correction is controlled.</p>
<p>We correct the defect in <span class="code">build1</span> with an additional change to <span class="code">file1.txt</span> to produce the following.<br />
<pre class="brush: plain;">Mary had a little lamb,
It's fleece was white as snow,</pre></p>
<p>The following illustration shows <span class="code">build2</span> (in this case I have re-used <span class="code">CR1</span> to correct the defect). I should be obvious that missing any revision associated with <span class="code">CR1</span> has the potential to break the build&#8217;s integrity (we may have only part of <span class="code">CR1</span> in the build).<br />
<div id="attachment_745" class="wp-caption aligncenter" style="width: 310px"><a href="http://principiait.files.wordpress.com/2010/06/buildintegrityfix.png"><img src="http://principiait.files.wordpress.com/2010/06/buildintegrityfix.png?w=300&#038;h=234" alt="" title="Second build using reworked change" width="300" height="234" class="size-medium wp-image-745" /></a><p class="wp-caption-text">Fix Build: Conceptual change implemented with reworked literal change</p></div><br />
Using a separate change record to control the defect does not really solve this problem, it merely makes it less apparent. Consider the following illustration, it shows the same situation but this time I have used another change record (<span class="code">D1</span>) to control the defect.<br />
<div id="attachment_744" class="wp-caption aligncenter" style="width: 310px"><a href="http://principiait.files.wordpress.com/2010/06/buildintegrityfix1.png"><img src="http://principiait.files.wordpress.com/2010/06/buildintegrityfix1.png?w=300&#038;h=234" alt="" title="Second build with separate change" width="300" height="234" class="size-medium wp-image-744" /></a><p class="wp-caption-text">Fix build: Conceptual change now implemented with two literal changes</p></div><br />
Although I can exclude the defect resolution from the build configuration and, in this special case, claim to have maintained build integrity, it is difficult to justify semantically as I have not really included the sum of the conceptual change — the change is supposed to achieve a specific effect upon the system (the spelling correction), something it failed to do with the original literal <span class="code">CR1</span> in <span class="code">build1</span> but we hope it does with the combination of literal changes managed by change records <span class="code">CR1</span> and <span class="code">D1</span>.</p>
<p>And this is the point. Yes, the literal changes <span class="code">CR1</span> and <span class="code">D1</span> are, in one sense, changes. In practical terms though each on its own fails to achieve the objective of the original change request and consequently they are little more than sets of revisions. The two literal changes controlled by records <span class="code">CR1</span> and <span class="code">D1</span>, taken together, achieve the original goal of the change request &#8220;correct spelling mistakes in the poem&#8221;. It is this latter type of change (what I have called conceptual change) that is more interesting to configuration management and build integrity is maintained through these conceptual changes rather than the less significant literal changes.</p>
<p>This distinction between the conceptual change and literal change becomes increasingly important as we consider configuration integrity, a subject I shall discuss in more detail in subsequent posts.</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/itslm/build-management/'>Build Management</a>, <a href='http://blog.principia-it.co.uk/category/itslm/change-management/'>Change Management</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/'>Configuration Management</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/'>Software Configuration Management</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/version-control/'>Version Control</a> Tagged: <a href='http://blog.principia-it.co.uk/tag/build/'>build</a>, <a href='http://blog.principia-it.co.uk/tag/change/'>change</a>, <a href='http://blog.principia-it.co.uk/tag/cm/'>CM</a>, <a href='http://blog.principia-it.co.uk/tag/development-2/'>development</a>, <a href='http://blog.principia-it.co.uk/tag/scm/'>SCM</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/624/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/624/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/principiait.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/principiait.wordpress.com/624/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/principiait.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/principiait.wordpress.com/624/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/624/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/624/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/624/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=624&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/06/12/when-is-a-change-a-change/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/06/buildintegrity.png?w=300" medium="image">
			<media:title type="html">Initial build</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/06/buildintegrityfix.png?w=300" medium="image">
			<media:title type="html">Second build using reworked change</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/06/buildintegrityfix1.png?w=300" medium="image">
			<media:title type="html">Second build with separate change</media:title>
		</media:content>
	</item>
		<item>
		<title>Items have history</title>
		<link>http://blog.principia-it.co.uk/2010/03/17/items-have-history/</link>
		<comments>http://blog.principia-it.co.uk/2010/03/17/items-have-history/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 18:02:25 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[CMCrossroads]]></category>
		<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[SCM Tool]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[Version Control]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=628</guid>
		<description><![CDATA[As those of you who have been following this blog for any time will know I am currently looking in some detail at parallel development, specifically how it can be managed safely by non-expert version managers. I have used parallel development with much success on many projects but codifying my knowledge into a tool is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=628&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As those of you who have been following this blog for any time will know I am currently looking in some detail at <a href="http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/parallel-development-theory-and-practice/">parallel development</a>, specifically how it can be managed safely by non-expert version managers. I have used parallel development with much success on many projects but codifying my knowledge into a <a href="http://blog.principia-it.co.uk/category/development/scm-tool/">tool</a> is proving challenging — and interesting too. In this post I will be considering item histories.<span id="more-628"></span></p>
<p>It is easy to become entangled in confused terminology when discussing items and item histories. To avoid such confusion I will define an Item as a specific version of something we control (most commonly in software configuration management these &#8216;things&#8217; are files, so for the remainder of this post I will use files to illustrate, but remember that an Item could be anything we version control).</p>
<p>With this definition in mind we can define one type of history as a set of Items related to one another by a predecessor/successor relationship. This is the most common history one becomes familiar with, the revision history.</p>
<p>But there is another history worth considering. The process of managing an Item may involve  the Item passing through a number of states. We commonly refer to these states as a lifecycle. An Item may be created into the NEW state, then be edited by a developer in the DEVELOP state. Once completed the developer may submit the item to the REVIEW state for a code review. The item may them pass through various states before finally reaching the RELEASED state. The lifecycle history is independent of the Item revision history.</p>
<p>To illustrate the difference between the lifecycle history and the revision history consider <span class="code">file1.txt</span> shown below. This file has three revision Items; <span class="code">1</span>, <span class="code">2</span>, and <span class="code">3</span>.</p>
<p><a href="http://principiait.files.wordpress.com/2010/03/simplerevisionhistory.png"><img src="http://principiait.files.wordpress.com/2010/03/simplerevisionhistory.png?w=450" alt="" title="file1.txt Revision History"   class="aligncenter size-full wp-image-634" /></a></p>
<p>Zooming in to the <span class="code">file1.txt</span> revision <span class="code">3</span> Item we see the following lifecycle history.</p>
<p><a href="http://principiait.files.wordpress.com/2010/03/simpleiifecyclehistory1.png"><img src="http://principiait.files.wordpress.com/2010/03/simpleiifecyclehistory1.png?w=450&#038;h=265" alt="" title="file1.txt revision 3 Lifecycle History" width="450" height="265" class="aligncenter size-full wp-image-640" /></a></p>
<p><span class="code">file1.txt</span> revision <span class="code">3</span> passed through all of these lifecycle states, passing through the DEV-TEST states twice as a defect was found and resolved.</p>
<p>Version control tools track the revision history but seldom the Item lifecycle history. Configuration management tools, such as Dimensions, capture both the revision history and the lifecycle history.</p>
<p>Any generalised tool for analysing and reporting configurations from as wide a variety of sources must deal with these different histories.</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/cmcrossroads/'>CMCrossroads</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/'>Configuration Management</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>, <a href='http://blog.principia-it.co.uk/category/development/scm-tool/'>SCM Tool</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/'>Software Configuration Management</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/version-control/'>Version Control</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/628/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/628/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/628/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/628/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/principiait.wordpress.com/628/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/principiait.wordpress.com/628/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/principiait.wordpress.com/628/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/principiait.wordpress.com/628/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/628/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/628/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/628/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/628/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/628/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/628/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=628&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/03/17/items-have-history/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/03/simplerevisionhistory.png" medium="image">
			<media:title type="html">file1.txt Revision History</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/03/simpleiifecyclehistory1.png" medium="image">
			<media:title type="html">file1.txt revision 3 Lifecycle History</media:title>
		</media:content>
	</item>
		<item>
		<title>Parallel development: theory and practice</title>
		<link>http://blog.principia-it.co.uk/2010/02/10/parallel-development-theory-and-practice/</link>
		<comments>http://blog.principia-it.co.uk/2010/02/10/parallel-development-theory-and-practice/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 19:59:11 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[ITSLM]]></category>
		<category><![CDATA[Parallel Development Principles]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[Version Control]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=590</guid>
		<description><![CDATA[Having spent the past couple of weeks with a client working through the issues that need to be carefully considered when version controlling software, and in particular how to manage and control parallel development. I have come to three conclusions: People are often more afraid of the perceived problems than the practical realities of parallel [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=590&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Having spent the past couple of weeks with a client working through the issues that need to be carefully considered when version controlling software, and in particular how to manage and control parallel development. I have come to three conclusions:</p>
<ol>
<li>People are often more afraid of the perceived problems than the practical realities of parallel development.</li>
<li>People do not truly appreciate the problems and practical realities of version control and parallel development.</li>
<li>There is a need for more theoretical work on the topic and, perhaps more significantly, a need for more formal expression of the process and problems involved.</li>
<li>There is a quite substantial book that could be written on the subject.</li>
</ol>
<p><span id="more-590"></span><br />
The first two points are related to the last two insofar as people need a clear explanation of the discipline and, to really acquire a firm understanding of the subject, you need to commit to studying it. There is simply no easy way to explain the more complex material (and by simple I mean one side of A4 summaries demanded by people who think they need to know but who have no practical exposure to the technical nature of software development or version control — there is no &#8216;managers guide too..&#8217;).</p>
<p>As to the third point, I have expressed a concern about this before in various forums. Rather than continue to observe the problem I have decided to start doing something about it. So, over the coming weeks and months I will be expanding some ideas I&#8217;ve been mulling over for many years in a series of posts to this blog (special category set up <a href="http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/parallel-development-theory-and-practice/">here</a>) and on <a href="http://www.principia-it.co.uk/parallel-development-theory-and-practice">my website</a>. Be warned though, these articles will probably get very theoretical, often be speculative, and may raise as many new questions as they resolve existing ones. We shall see.</p>
<p>As for the final point, as I build up a sufficiently cogent set of material while writing on the blog (a process unlikely to be well structured), I will assemble more coherent articles on <a href="http://www.principia-it.co.uk/parallel-development-theory-and-practice">my website</a> and who knows I might get round to pulling them together into a book one day. (Ha! Another of the many books I either intend to write or am in the process of writing but may never finish or publish — *sigh* so many things to do, so little time.) I may even pull material together and add it to the <a href="http://www.cmcrossroads.com/cgi-bin/cmwiki/view/">CM wiki</a> or the <a href="http://www.itslmbok.com/wiki">ITSLM BoK</a>. You never know, stranger things have happened.</p>
<p>Rather than start here, I&#8217;ll start an introductory post right now and hopefully have it up in the next day or two. In the meantime, you could check out some past posts on the subject; <a href="http://blog.principia-it.co.uk/2010/02/01/whos-afraid-of-the-big-bad-merge/">here</a> and <a href="http://blog.principia-it.co.uk/2009/06/23/basic-branching/">here</a></p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/'>Configuration Management</a>, <a href='http://blog.principia-it.co.uk/category/itslm/'>ITSLM</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/parallel-development-principles/'>Parallel Development Principles</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/'>Software Configuration Management</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/version-control/'>Version Control</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/590/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/590/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/principiait.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/principiait.wordpress.com/590/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/principiait.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/principiait.wordpress.com/590/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/590/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/590/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/590/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=590&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/02/10/parallel-development-theory-and-practice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>
	</item>
		<item>
		<title>Who&#8217;s afraid of the big bad merge?</title>
		<link>http://blog.principia-it.co.uk/2010/02/01/whos-afraid-of-the-big-bad-merge/</link>
		<comments>http://blog.principia-it.co.uk/2010/02/01/whos-afraid-of-the-big-bad-merge/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 20:15:19 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[CMCrossroads]]></category>
		<category><![CDATA[Parallel Development Principles]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[Version Control]]></category>
		<category><![CDATA[branching]]></category>
		<category><![CDATA[dependencies]]></category>
		<category><![CDATA[merging]]></category>
		<category><![CDATA[parallel development]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=530</guid>
		<description><![CDATA[A common objection to using parallel development is the fear of the inevitable merging required to reintegrate the changes as the development proceeds. In this post I will take a look at some of the issues that arise from managing parallel development and, perhaps more importantly, provide some guidance on how to avoid the pitfalls [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=530&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A common objection to using parallel development is the fear of the inevitable merging required to reintegrate the changes as the development proceeds. In this post I will take a look at some of the issues that arise from managing parallel development and, perhaps more importantly, provide some guidance on how to avoid the pitfalls of parallel development.<span id="more-530"></span></p>
<h2>Simple Merges</h2>
<p>The most basic merge is a very straightforward (although, as we shall see, can have hidden complexities).<br />
<div id="attachment_532" class="wp-caption aligncenter" style="width: 460px"><a href="http://principiait.files.wordpress.com/2010/02/cm-pard-dia-001-simple-merge-schematic.png"><img src="http://principiait.files.wordpress.com/2010/02/cm-pard-dia-001-simple-merge-schematic.png?w=450&#038;h=212" alt="" title=" Simple Merge" width="450" height="212" class="size-full wp-image-532" /></a><p class="wp-caption-text">Simple Merge</p></div><br />
In this example changes to the file are merged between the two branches resulting in a new revision on the upper branch. Since the changes are to different parts of the file the merge can be performed automatically, resulting in a file containing both sets of changes.</p>
<p>The most obvious limitation of these simple merges is that the file must be &#8216;mergeable&#8217;, which for most tools means the file must be record oriented. Text files are a collection of records, one for each line in the file. Binary files tend to be resistant to merge unless a special tool is provided (MSWord can merge two documents with reasonable accuracy).</p>
<h2>Conflicting Merges</h2>
<p>Sometimes a merge involves changes to the same records (the same lines in a text file) in the same file. The illustration below shows just such a merge.<br />
<div id="attachment_535" class="wp-caption aligncenter" style="width: 460px"><a href="http://principiait.files.wordpress.com/2010/02/cm-pard-dia-002-simple-conflicting-merge-schematic.png"><img src="http://principiait.files.wordpress.com/2010/02/cm-pard-dia-002-simple-conflicting-merge-schematic.png?w=450&#038;h=242" alt="" title="Conflicting Merge" width="450" height="242" class="size-full wp-image-535" /></a><p class="wp-caption-text">Conflicting Merge</p></div><br />
The most notable feature of this merge is the line marked &#8216;Developer resolves conflicts&#8217;. Conflicting merges require human intervention to decide which parts of the conflicting lines should be accepted into the final merged version of the file.</p>
<p>Sometimes these conflict resolutions will require more than a simple decision about which line from the two changes should be adopted and the developer will need to rework both changes to make them work together. Fortunately the majority of merge conflicts are relatively straightforward providing integrations are performed frequently.</p>
<div class="sidebar">
<h3>Merge Frequency</h3>
<p>One of the skills you quickly develop when managing parallel development is knowing when to merge and how frequently to merge. One simple piece of guidance is to merge early and often. Unfortunately this is not always the most useful strategy, but that is a discussion for another post.
</p></div>
<h2>Renamed and Moved Files</h2>
<p>While merging a file&#8217;s content is commonly supported by version control tools, tracking renamed and moved files during a merge operation is less well supported but in todays software development world, where refactoring is common, it is increasingly essential.</p>
<p>The problem with renamed and moved files are summarised in the following illustration.<br />
<div id="attachment_543" class="wp-caption aligncenter" style="width: 460px"><a href="http://principiait.files.wordpress.com/2010/02/cm-swecm-dia-003-merge-with-rename.png"><img src="http://principiait.files.wordpress.com/2010/02/cm-swecm-dia-003-merge-with-rename.png?w=450&#038;h=246" alt="" title="Merge with rename" width="450" height="246" class="size-full wp-image-543" /></a><p class="wp-caption-text">Merge with rename</p></div><br />
In the top branch <span class="code">file2</span> has been modified, but in the lower branch <span class="code">file2</span> has been both modified and renamed to <span class="code">file3</span>. The desired result, shown in the final version to the right, contains the changes from both <span class="code">file2</span> in the top branch and the changes in <span class="code">file3</span> in the lower branch. But most importantly, the file has also been renamed to <span class="code">file3</span> in the upper branch.</p>
<h2>Rename/move conflicts</h2>
<p>Merges involving renames do not necessarily run smooth. Not only are they subject to the same content merge issues as the simple file merge but also the problem when the file is renamed/moved in both branches. This situation is illustrated below.<br />
<div id="attachment_545" class="wp-caption aligncenter" style="width: 460px"><a href="http://principiait.files.wordpress.com/2010/02/cm-swecm-dia-004-rename-conflict.png"><img src="http://principiait.files.wordpress.com/2010/02/cm-swecm-dia-004-rename-conflict.png?w=450&#038;h=256" alt="" title=" Rename conflict" width="450" height="256" class="size-full wp-image-545" /></a><p class="wp-caption-text"> Rename conflict</p></div><br />
In this case the tool has chosen to include both renamed files. This may not be what was intended, so care must be taken when dealing with renamed and moved files. Other tools will display a conflict and require user intervention to decide the correct name to assign to the file in the merged <span class="code">dir1</span>.</p>
<h2>Mitigation</h2>
<p>Before moving on to some other issues you will encounter when using parallel development, we pause briefly to consider how to avoid, or at least mitigate, some of the issues mentioned so far.</p>
<p>Firstly, despite the impression the previous sections may have conjured, merging is not fraught with perils. After many years of managing parallel development on projects ranging from the simple to very complex, I can assure you that, with a little common sense and some forethought the issues can be minimised (but seldom completely eliminated).</p>
<ol>
<li>Merge as early as you can, and then merge often to keep each merge as small and manageable as possible.</li>
<li>When you have input to a project&#8217;s design, ensure a sound architecture. This will minimise overlapping changes and consequently merge conflicts.</li>
<li>If you identify files that are merged often, try to decompose the file into smaller files to avoid high merge rates. (This is common with files used for configuration or files containing a lot of utility code.)</li>
<li>Keep refactoring on one branch. Renaming and moving files can cause tricky merge issues when performed on many branches.</li>
</ol>
<p>Now, <a href="http://blog.principia-it.co.uk/2010/02/01/whos-afraid-of-the-big-bad-merge/2/">on to some issues</a> that, while not unique to parallel development, can make your life difficult if not managed properly. </p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/cmcrossroads/'>CMCrossroads</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/parallel-development-principles/'>Parallel Development Principles</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/'>Software Configuration Management</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/version-control/'>Version Control</a> Tagged: <a href='http://blog.principia-it.co.uk/tag/branching/'>branching</a>, <a href='http://blog.principia-it.co.uk/tag/dependencies/'>dependencies</a>, <a href='http://blog.principia-it.co.uk/tag/merging/'>merging</a>, <a href='http://blog.principia-it.co.uk/tag/parallel-development/'>parallel development</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/530/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/530/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/530/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/530/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/principiait.wordpress.com/530/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/principiait.wordpress.com/530/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/principiait.wordpress.com/530/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/principiait.wordpress.com/530/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/530/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/530/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/530/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/530/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/530/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/530/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=530&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/02/01/whos-afraid-of-the-big-bad-merge/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/02/cm-pard-dia-001-simple-merge-schematic.png" medium="image">
			<media:title type="html"> Simple Merge</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/02/cm-pard-dia-002-simple-conflicting-merge-schematic.png" medium="image">
			<media:title type="html">Conflicting Merge</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/02/cm-swecm-dia-003-merge-with-rename.png" medium="image">
			<media:title type="html">Merge with rename</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/02/cm-swecm-dia-004-rename-conflict.png" medium="image">
			<media:title type="html"> Rename conflict</media:title>
		</media:content>
	</item>
		<item>
		<title>Basic Branching</title>
		<link>http://blog.principia-it.co.uk/2009/06/23/basic-branching/</link>
		<comments>http://blog.principia-it.co.uk/2009/06/23/basic-branching/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 12:45:53 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[Version Control]]></category>
		<category><![CDATA[branch]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[delta]]></category>
		<category><![CDATA[version]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=143</guid>
		<description><![CDATA[This article lays the foundation for a series on branching and the development management techniques it enables. A simple linear development progresses by building one version on another. So, version one is updated to produce version two, version two is changed to make version three, and so on. This form of version progression is well [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=143&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This article lays the foundation for a series on branching and the development management techniques it enables.</p>
<div id="attachment_163" class="wp-caption alignright" style="width: 218px"><a href="http://principiait.files.wordpress.com/2009/06/basic-two-versions1.png"><img class="size-full wp-image-163 " title="Simple version line" src="http://principiait.files.wordpress.com/2009/06/basic-two-versions1.png?w=450" alt="Versions and Delta"   /></a><p class="wp-caption-text">Versions and Delta</p></div>
<p>A simple linear development progresses by building one version on another. So, version one is updated to produce version two, version two is changed to make version three, and so on. This form of version progression is well understood whether the thing being controlled is a document, source file, or an entire system.</p>
<p>The diagram on the right shows a simple linear version line. Versions one and two are separated by the change (or delta) &#8216;a&#8217;. This can be read as version &#8217;1&#8242; with changes &#8216;a&#8217; becomes version &#8217;2&#8242;.</p>
<p>If all development work could be relied upon to be this linear then this would be a very short series. Fortunately for us, this simple linear model cannot be relied upon for anything but the simplest development work.</p>
<h1>Bring on the branch</h1>
<p>Suppose we have released version two of our product to formal user testing and have begun development of version three of the product. Formal user testing will last for at least six weeks and after that we expect that the product will be in use for some time before version three is ready.</p>
<p>During testing we expect to find some defects and the users will undoubtedly request some &#8216;fine tuning&#8217; of version two.</p>
<p>This situation cannot be accommodated with the simple linear development process described above. What we need is some means to manage the corrections to version two while version three development is carried out.  Of course, any changes we make in version two must eventually be included in version three (otherwise defects corrected in version two will suddenly reappear when we release version three). However, we do not want changes made when developing version three to be included in version two maintenance (otherwise we would find partially implemented version three changes suddenly causing problems in the user test version one systems).</p>
<div id="attachment_167" class="wp-caption aligncenter" style="width: 310px"><a href="http://principiait.files.wordpress.com/2009/06/basic-two-branch.png?w=300"><img class="size-medium wp-image-167 " title="Basic Branch" src="http://principiait.files.wordpress.com/2009/06/basic-two-branch.png?w=300&#038;h=174" alt="Basic Branch" width="300" height="174" /></a><p class="wp-caption-text">Basic Branch</p></div>
<p>The diagram above shows a simple branch. Our main development (the work developing version three of our product) continues, while maintenance work is branched off from version two of the product (shown above as version &#8216;a1&#8242;).</p>
<p>Any changes made between version &#8217;2&#8242; and &#8217;3&#8242; in the main line development have no effect on the branch.</p>
<p>The branch is used to make changes such as defect resolution during the testing of version two. Any changes on the branch (between version &#8216;a1&#8242; and &#8216;a2&#8242;) must be integrated back into the main line development before version &#8217;3&#8242; is released for testing. This ensures that any defects fixed during version two testing are also fixed in version three.</p>
<p>Branching really is that simple. However (there&#8217;s always a &#8216;however&#8217; in there somewhere), while this is schematically correct and simple, in real life things can get more complicated. I leave dealing with these complications for another day.</p>
<p>As always, any questions can be addressed to <a title="Mark's contact details" href="http://www.principia-it.co.uk/contact/mark-bools">me directly</a> or through the comments on this post.</p>
<br />Posted in Version Control Tagged: branch, change, delta, version <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/principiait.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/principiait.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/principiait.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/principiait.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/143/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&amp;blog=8032610&amp;post=143&amp;subd=principiait&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2009/06/23/basic-branching/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2009/06/basic-two-versions1.png" medium="image">
			<media:title type="html">Simple version line</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2009/06/basic-two-branch.png?w=300" medium="image">
			<media:title type="html">Basic Branch</media:title>
		</media:content>
	</item>
	</channel>
</rss>
