<?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/"
	>

<channel>
	<title>Commavee &#187; Source Control</title>
	<atom:link href="http://commavee.com/category/source-control/feed/" rel="self" type="application/rss+xml" />
	<link>http://commavee.com</link>
	<description>from John Minnihan, founder of Freepository.</description>
	<lastBuildDate>Sat, 20 Feb 2010 19:08:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Tech Tip: Multi-line Perl regex pattern match</title>
		<link>http://commavee.com/2009/06/18/tech-tip-multi-line-perl-regex-pattern-match/</link>
		<comments>http://commavee.com/2009/06/18/tech-tip-multi-line-perl-regex-pattern-match/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 16:56:53 +0000</pubDate>
		<dc:creator>John Minnihan</dc:creator>
				<category><![CDATA[General Technology]]></category>
		<category><![CDATA[Source Control]]></category>
		<category><![CDATA[Tech Tips]]></category>

		<guid isPermaLink="false">http://commavee.com/2009/06/18/tech-tip-multi-line-perl-regex-pattern-match/</guid>
		<description><![CDATA[This post illustrates a complex pattern-matching technique in Perl.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcommavee.com%2F2009%2F06%2F18%2Ftech-tip-multi-line-perl-regex-pattern-match%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcommavee.com%2F2009%2F06%2F18%2Ftech-tip-multi-line-perl-regex-pattern-match%2F" height="61" width="51" /></a></div><p><span style="font-family:Arial">Yesterday, I encountered an analysis issue that appeared to be resolvable with a simple pattern replacement technique. <br />
<span id="more-565"></span><br />
This turned out to be a bit more complex than estimated, as the pattern spanned multiple lines and I struggled to get the regex constructed to match this use case.</span></p>
<p><span style="font-family:Arial">I finally figured it out, and although the overall problem remains unresolved (it has many layers), this particular part works well.  My error was in how I viewed use of  /s and /m as mutually exclusive; they aren&#8217;t of course, and I have made that mistake one other time over the years.   I also hadn&#8217;t set the input record separator ($/) to paragraph read mode.   I&#8217;m posting details here to document my specific usage.</span></p>
<p><span style="font-family:Arial">Assumptions:</span></p>
<ul>
<li><span style="font-family:Arial">A literal pattern exists that is present in multiple places in a file</span></li>
<li><span style="font-family:Arial">The literal pattern spans multiple lines in the file</span></li>
<li>
<span style="font-family:Arial">Literal pattern is</span></p>
<ul>
<li><span style="font-family:Courier">Node-path: branches/%%BRANCHES%%</span></li>
<li><span style="font-family:Courier">Node-kind: dir</span></li>
<li><span style="font-family:Courier">Node-action: add</span></li>
</ul>
</li>
<li><span style="font-family:Arial">Perl is being used to read the file and current line of file is <span style="font-family:Courier">$line</span></span></li>
<li><span style="font-family:Arial">Objective is to delete all occurrences of this pattern from the file one <span style="font-family:Courier">$line</span> at a time</span></li>
</ul>
<p><span style="font-family:Arial">Here&#8217;s how I did that:</span></p>
<p>[read the file &amp; crawl thru the lines]</p>
<p><span style="font-family: Courier; font-size: 10pt">$/ = &#8221;;</span></p>
<p><span style="font-family: Courier; font-size: 10pt">$line =~ s/^Node-path:\sbranches\/%%BRANCHES%%.*?^Node-kind:\sdir.*?^Node-action:\sadd.*?//sm;</span></p>
<p><span style="font-family:Arial"><small>Tags: <a rel="tag" href="http://technorati.com/tag/perl">perl</a>, <a rel="tag" href="http://technorati.com/tag/regex">regex</a>, <a rel="tag" href="http://technorati.com/tag/tech-tips">tech-tips</a></small></span></p>
<p><!--pp-thumb-start--><!--PictPress found no dir /usr/local/apache2/htdocs/wordpress/wp-content/uploads/2009/06/tech-tip-multi-line-perl-regex-pattern-match--><!--pp-thumb-end--></p>
<img src="http://commavee.com/?ak_action=api_record_view&id=565&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://commavee.com/2009/06/18/tech-tip-multi-line-perl-regex-pattern-match/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t install TortoiseSVN v 1.6.2?</title>
		<link>http://commavee.com/2009/05/20/dont-install-tortoisesvn-v-162/</link>
		<comments>http://commavee.com/2009/05/20/dont-install-tortoisesvn-v-162/#comments</comments>
		<pubDate>Thu, 21 May 2009 01:27:23 +0000</pubDate>
		<dc:creator>John Minnihan</dc:creator>
				<category><![CDATA[Source Control]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://commavee.com/2009/05/20/dont-install-tortoisesvn-v-162/</guid>
		<description><![CDATA[Update: TortoiseSVN 1.6.3 is stable and works well &#8212; jbminn
A friend of mine forwarded this to me a few days ago; I filed it away under &#8216;refer to later&#8217;.   Later just arrived, as I saw someone tweet about a TortoiseSVN issue on Vista.
I&#8217;m relaying this here in the hope that it saves folks the hassle [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcommavee.com%2F2009%2F05%2F20%2Fdont-install-tortoisesvn-v-162%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcommavee.com%2F2009%2F05%2F20%2Fdont-install-tortoisesvn-v-162%2F" height="61" width="51" /></a></div><p><span style="font-family:Arial"><i>Update: TortoiseSVN 1.6.3 is stable and works well &#8212; jbminn</i></p>
<p>A friend of mine forwarded this to me a few days ago; I filed it away under &#8216;refer to later&#8217;.   Later just arrived, as I saw someone tweet about a TortoiseSVN issue on Vista.</span></p>
<p><span style="font-family:Arial">I&#8217;m relaying this here in the hope that it saves folks the hassle of figuring it out themselves.</span></p>
</p>
<blockquote>
<p>I [installed TortoiseSVN 1.6.2] this morning, and it just failed silently, After digging out some logs etc, I found the very helpful Microsoft message &quot;Application did not start because its side-by-side configuration was not correct&quot;<br />That has to be one of the most non-enlightening error messages of all time.</p>
<p>I had come across that myself before with ScreenCap, and I was able to figure out that it has some mysterious connection to the .NET framework. However, my work-around was pretty ugly, and not useful in this case.</p>
<p>My recovery for tortoise is that I had to uninstall the new version, restart 3 times to make sure that windows forgot about it it, and then install the older (1.6.1) version.</p>
<p>From previous experience with this side-by-side nonsense, this seems to be Vista specific because I&#8217;ve never seen that message in an XP machine. Interestingly enough, I didn&#8217;t see a bug report on the tortoise site, but I only did a cursory look through the list.</p>
<p><small>Tags: <a rel="tag" href="http://technorati.com/tag/twitter">twitter</a>, <a rel="tag" href="http://technorati.com/tag/tortoisesvn">tortoisesvn</a>, <a rel="tag" href="http://technorati.com/tag/vista">vista</a></small></p>
</blockquote>
<p><!--pp-thumb-start--><!--PictPress found no dir /usr/local/apache2/htdocs/wordpress/wp-content/uploads/2009/05/dont-install-tortoisesvn-v-162--><!--pp-thumb-end--></p>
<img src="http://commavee.com/?ak_action=api_record_view&id=559&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://commavee.com/2009/05/20/dont-install-tortoisesvn-v-162/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>A Branching Strategy</title>
		<link>http://commavee.com/2008/08/18/a-branching-strategy/</link>
		<comments>http://commavee.com/2008/08/18/a-branching-strategy/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 19:17:32 +0000</pubDate>
		<dc:creator>John Minnihan</dc:creator>
				<category><![CDATA[Source Control]]></category>

		<guid isPermaLink="false">http://commavee.com/2008/08/18/a-branching-strategy/</guid>
		<description><![CDATA[ 
Executive Summary
To support increased responsiveness to business needs, an enterprise is considering a move to monthly site releases. 
Increased frequency of releases places additional demands upon the engineering, QA and release teams with regard to developing, maintaining, testing, and tracking multiple lines of development.  The challenge to the enterprise is how to balance the engineering team’s [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcommavee.com%2F2008%2F08%2F18%2Fa-branching-strategy%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcommavee.com%2F2008%2F08%2F18%2Fa-branching-strategy%2F" height="61" width="51" /></a></div><p> </p>
<p><strong>Executive Summary</strong></p>
<p>To support increased responsiveness to business needs, an enterprise is considering a move to monthly site releases. </p>
<p>Increased frequency of releases places additional demands upon the engineering, QA and release teams with regard to developing, maintaining, testing, and tracking multiple lines of development.  The challenge to the enterprise is how to balance the engineering team’s need for ongoing development, which is often experimental in nature and uncertain in outcome (the “what”), with those of the business whose focus is more schedule-driven, and thus highly dependent upon calendar time (the “when”).</p>
<p><span id="more-469"></span></p>
<p><span style="font-family:Arial">Developed through years of consulting in the release management space, Freepository presents a clear strategy for managing these demands through utilization of source code repository branches in Subversion (SVN).</span></p>
<p><span style="font-family:Arial">This posting explores the “how” of managing these occasionally contradictory release management objectives.</span></p>
<p><strong>Background</strong></p>
<p>Every branch in SVN is simply a copy of another line of development. This presents new opportunities in managing these lines of development, as their topological location in the repository maps directly to their branch name. This means that branch names – the actual lines of development – are visually evident.</p>
<p>Using these visual and topological cues, lines of development may be easily segregated in SVN. Simply creating (or copying) a new branch creates a new line of development that is immediately and unambiguously present, available, and distinct.</p>
<p><strong>How are Lines of Development Managed?<br />
</strong><br />
In SVN, a best practice has emerged that maps to the real-world process of release management.</p>
<p>{svnroot}://branches<br />
                //tags<br />
                //trunk</p>
<p>The folders &#8216;branches, tags and trunk&#8217; refer to the method of organizing your lines of development. In branches, you have as many different lines as is necessary to support concurrent development, such that activity in one line of development does not destabilize activity in another line (branch).</p>
<p>Tags are simply ways to &#8220;save&#8221; lines of development at specific points in time. Common uses of tags include labeling a line of development that is/was released. Using the tag, you may reproduce that exact set of source code at any point in the future.</p>
<p>The trunk is often referred to as &#8220;main-line&#8221;, as it is where the main line of development is stored for a project. Experimental work occurs in branches, when it is deemed &#8220;ready&#8221; it is merged back to trunk. When code is packaged and released, it is tagged.</p>
<p>A key point here is no ongoing, day-to-day development activity occurs on the trunk. This is in contrast to the current practice at many enterprises. The trunk is literally the stable line of development that is currently in production – nothing else.</p>
<p>At each production release, the release tag is merged to trunk. This ensures that the trunk always contains exactly &amp; only the state of the current production site. This is an important point and bears repeating – no ongoing development occurs on the trunk. Its sole purpose is to maintain the state of production after the fact.</p>
<p>The use of the branches folder in SVN supports project- or initiative-based segregation of development.</p>
<p>Consider this example:</p>
<p>{svnroot}://branches/project-one<br />
                   branches/project-two</p>
<p>Two lines of development are currently active – Project One and Project Two. There is no ambiguity, as each project is clearly visible in the branches section of the SVN tree. Activity in Project One is independent of activity in Project Two.</p>
<p>At some point, the business determines that Project Three – a new initiative &#8211; is approved and development activity is going to start. A new branch is created to support this</p>
<p>{svnroot}://branches/project-three</p>
<p>In the same namespace where Project One and Project Two are currently under development, Project Three is now present. Its line of development may begin and progress at whatever rate is necessary and appropriate, as both Projects One and Two have been doing. This technique implies that Project One, Project Two and Project Three are decoupled; no dependencies exist, and thus these lines are truly independent.</p>
<p><strong>What if there are dependencies?</strong></p>
<p><span style="font-family:Arial">A practice that I have employed elsewhere extends this technique. Lines of development that consist of multiple projects, such as site features that are dependent upon others, may be grouped together in meta-projects at inception. This facilitates immediate, ongoing integration between the articles of development in the meta-project, while maintaining separation from any other level of constraint.</span></p>
<p>Meta-projects are often given code names. This allows teams to make reference to the line of development, develop in it and for it, while keeping it separate from other activity. By using code names, the teams involved have removed the artificial constraints of schedule-based development. They are free to develop, experiment and abandon work as necessary without destabilizing any other line of development.</p>
<p>Continuing our example, this technique is implemented in SVN like this</p>
<p>{svn}://branches/eureka/project-one<br />
                           /eureka/project-two<br />
                           /eureka/common</p>
<p>Such a technique allows this related development to take place in a manner that lets the business decide when to schedule the release. This may sound confusing, but consider the case where the related activity (the set of initiatives code-named eureka in the example) is so large in scope that we cannot reasonably – at inception – estimate when it will be complete.</p>
<p>Using code-named based branches allows us to conduct enough engineering to make this determination, again without destabilizing any other development activity. We can then make the necessary business decisions about the release, up to and including abandoning it, knowing that we won’t have to “yank it out” of a branch where others are working.</p>
<p>When the projects are complete and ready to be integrated, a new branch is created, into which the project branches are merged. The integration is done when the projects are ready – not before. This decouples the engineering activity from the integration constraints usually associated with schedule-driven development.</p>
<p>Integration branches are used to facilitate the merging of multiple projects or initiatives into a schedule-based branch that may be tracked independently, for example:</p>
<p>{svnroot}://branches/integration-8.1</p>
<p>Creation of such a branch would support a proposed release naming convention for FY08, where we are using the year number (8) scoped with major release number (1). It is clear that this technique fully supports a release name such as 8.1.1, where this would be a bug fix of major release 8.1. Subsequent releases, if necessary, could be easily made (8.1.2, 8.1.3, etc)</p>
<p><strong>What does this mean? </strong></p>
<p><span style="font-family:Arial">It means that we can support multiple lines of development in non-colliding, visually apparent, and intuitively named branches. These lines may be merged when and if they are deemed ready into the current integration branch for inclusion in the next release.</span></p>
<p>When the integration branch’s articles of development pass acceptance testing, they may be labeled with a formal release tag. The release tag may then be used to identity and obtain the entire set of articles of development anytime in the future. In this respect, SVN tags are no different from CVS tags.</p>
<p>The key difference is that the tag is easy to produce, as it is simply a copy. Another difference is that ongoing development can be accepted on an SVN tag; though this is generally not advised, it could facilitate rapid resolution of production bugs on release night.</p>
<p><strong>Summary<br />
</strong><br />
The Branching Strategy may be characterized as a funnel. At the top of the funnel are loosely defined, decoupled lines of development that are not fully scoped. As the lines mature, they “fall” deeper into the funnel. Nearing the bottom of the funnel, the projects are completely engineered, fully integrated with dependent projects, until ultimately they “leave” the mouth of the funnel and get merged onto the trunk.</p>
<p><img style="margin: 5px" src="http://commavee.com/wp-content/uploads/2008/08/svn-branch-funnel.jpg" alt="" width="796" height="950" /></p>
<p> </p>
<p><small>Tags: <a rel="tag" href="http://technorati.com/tag/release+management">release management</a>, <a rel="tag" href="http://technorati.com/tag/svn">svn</a>, <a rel="tag" href="http://technorati.com/tag/subversion">subversion</a>, <a rel="tag" href="http://technorati.com/tag/branches">branches</a></small></p>
<p><!--pp-thumb-start--><!--PictPress found no dir /usr/local/apache2/htdocs/wordpress/wp-content/uploads/2008/08/a-branching-strategy--><!--pp-thumb-end--></p>
<img src="http://commavee.com/?ak_action=api_record_view&id=469&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://commavee.com/2008/08/18/a-branching-strategy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Collabnet Purchases SourceForge EE</title>
		<link>http://commavee.com/2007/04/25/collabnet-purchases-sourceforge-ee/</link>
		<comments>http://commavee.com/2007/04/25/collabnet-purchases-sourceforge-ee/#comments</comments>
		<pubDate>Wed, 25 Apr 2007 18:14:08 +0000</pubDate>
		<dc:creator>John Minnihan</dc:creator>
				<category><![CDATA[General Technology]]></category>
		<category><![CDATA[Source Control]]></category>

		<guid isPermaLink="false">http://commavee.com/2007/04/25/collabnet-purchases-sourceforge-ee/</guid>
		<description><![CDATA[Today Collabnet announced an agreement to purchase SourceForge Enterprise Edition:
http://biz.yahoo.com/e/070425/lnux8-k.html

Let the consolidation war begin.
 This pretty clearly indicates the difficulty that both have had in growing their enterprise customer base.  And since the deal was equity only (plus a small advertising dollars commitment over 30 months), this places enormous pressure on Collabnet for a [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcommavee.com%2F2007%2F04%2F25%2Fcollabnet-purchases-sourceforge-ee%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcommavee.com%2F2007%2F04%2F25%2Fcollabnet-purchases-sourceforge-ee%2F" height="61" width="51" /></a></div><p>Today Collabnet announced an agreement to purchase SourceForge Enterprise Edition:</p>
<p><a href="http://biz.yahoo.com/e/070425/lnux8-k.html" title="Collabnet purchases SourceForge EE">http://biz.yahoo.com/e/070425/lnux8-k.html</a><br />
<font face="Helvetica, Arial, sans-serif"><br />
</font><font face="Helvetica, Arial, sans-serif">Let the consolidation war begin.</font></p>
<p><span id="more-398"></span> <font face="Helvetica, Arial, sans-serif">This pretty clearly indicates the difficulty that both have had in growing their enterprise customer base.  And since the deal was equity only (plus a small advertising dollars commitment over 30 months), this places enormous pressure on Collabnet for a strong exit.  IBM already made a purchase in this space (Rational, whose own foray into the on-demand space years ago, Catapulse, was a spectacular flameout), and is unlikely to go too far away from the foundation of that license-fees cash cow.  </font></p>
<p><font face="Helvetica, Arial, sans-serif">CA has thus far shown no interest in on-demand solutions, so they are unlikely to step in as a white knight anytime soon.  In fact, just three days ago at CA World, John Swainson made mention of &#8220;Software as a Service&#8221; in the same context as &#8220;Web 2.0&#8243;, suggesting either a serious misunderstanding of SaaS, or more likely CA&#8217;s position that while interesting, SaaS (on-demand) is not in CA&#8217;s immediate game plan. </font></p>
<p><font face="Helvetica, Arial, sans-serif"> BMC might try to make a play here &#8211; and who knows, maybe even Borland.    Google would have been a likely candidate, but I <em>speculate </em>they did consider both Collabnet &amp; SourceForge a couple years back, but due diligence indicated they could build a better solution (the result being Google Code).  Oh, and just for completeness: Microsoft? Not a chance, so long as Collabnet is involved in SVN and its relationship with the Apache Foundation remains too cozy for comfort. </font></p>
<p><font face="Helvetica, Arial, sans-serif">I had an email exchange with a colleague who is almost as familiar with this space as me.  He seemed to think that Collabnet was preparing to announce something else, perhaps another round of financing.  I disagreed.</font></p>
<p><font face="Helvetica, Arial, sans-serif">The math on the VA revenue (16K per week for 30 months) indicates this  may have been an afterthought, or perhaps someone was looking for cash to cover expenses on some other initiative inside VA.  It is almost immaterial with respect to the transaction, so I&#8217;m curious why it was attached to this deal.</font></p>
<p><font face="Helvetica, Arial, sans-serif">I would be very surprised to see Collabnet raise more money.  *Somebody* was diluted by those 11MM shares going to VA.  </font><font face="Helvetica, Arial, sans-serif">If I am an investor, I&#8217;m asking these questions:  </font></p>
<p><font face="Helvetica, Arial, sans-serif"><em>What on earth did Collabnet really buy?  The brand?  The technology?   Customers?</em>   </font></p>
<p><font face="Helvetica, Arial, sans-serif">Is the Collabnet brand viewed so weakly in the marketplace that they had to purchase a competing brand?  Or is it an open acknowledgment that Collabnet&#8217;s technology doesn&#8217;t scale well (I&#8217;m told that almost everything ends up being a custom one-off), and that they are planning to adopt SFEE technology to replace Collabnet&#8217;s stuff?</font></p>
<p><font face="Helvetica, Arial, sans-serif">How this is good for Collabnet is hard for me to see.  But what do I know.</font><!--pp-thumb-start--><!--PictPress found no dir /usr/local/apache2/htdocs/wordpress/wp-content/2007/04/collabnet-purchases-sourceforge-ee--><!--pp-thumb-end--></p>
<img src="http://commavee.com/?ak_action=api_record_view&id=398&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://commavee.com/2007/04/25/collabnet-purchases-sourceforge-ee/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Subversion vs. Perforce</title>
		<link>http://commavee.com/2007/03/30/subversion-vs-perforce/</link>
		<comments>http://commavee.com/2007/03/30/subversion-vs-perforce/#comments</comments>
		<pubDate>Sat, 31 Mar 2007 00:37:27 +0000</pubDate>
		<dc:creator>John Minnihan</dc:creator>
				<category><![CDATA[Source Control]]></category>

		<guid isPermaLink="false">http://commavee.com/2007/03/30/subversion-vs-perforce/</guid>
		<description><![CDATA[I was recently asked to compare Subversion (SVN) to Perforce, and explain why I would choose to implement SVN rather than Perforce as a replacement for an existing CVS installation.
 A big reason not to continue looking at Perforce is its lack of support for workflow.  I asked a Perforce SE very pointed questions [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcommavee.com%2F2007%2F03%2F30%2Fsubversion-vs-perforce%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcommavee.com%2F2007%2F03%2F30%2Fsubversion-vs-perforce%2F" height="61" width="51" /></a></div><p>I was recently asked to compare Subversion (SVN) to Perforce, and explain why I would choose to implement SVN rather than Perforce as a replacement for an existing CVS installation.</p>
<p><span id="more-395"></span> A big reason not to continue looking at Perforce is its lack of support for workflow.  I asked a Perforce SE very pointed questions about how to integrate it with other tools that are very common in big shops, and the resulting answers boiled down to</p>
<blockquote><p>&#8220;&#8230;you would have to write something to do that&#8221;.</p></blockquote>
<p>As a pure repository management scheme, Perforce is adequate. I have seen, however, very large Perforce depots exhibit performance issues across the wire, and this would be disadvantageous.  Their use of client specs (nearly identical to Clearcase’s use of config specs), means that sets of versions are tied to specific view configurations, which if lost or damaged, are nearly impossible to reproduce. This can bring your ability to reproduce builds (and the releases that were promoted from them) to a halt.</p>
<p>Bottom line is that Subversion is a compelling replacement for CVS because</p>
<ul>
<li>SVN is faster &amp; more lightweight</li>
<li>SVN uses common HTTP &amp; HTTPS transport protocol (and thus is stateless and more compact across the wire)</li>
<li>SVN uses the exact same command namespace as CVS (co =&gt; co, ci =&gt; ci, add =&gt; add, etc.)</li>
<li>SVN works in virtually every IDE where CVS works</li>
</ul>
<p>This means that porting CVS-centric automation would less difficult, and would amount to an actual porting effort rather than new development.</p>
<p>Oh, and one more thing: SVN licenses are $0 per developer, per seat. Forever.</p>
<p><small>Tags: <a href="http://technorati.com/tag/svn" rel="tag">svn</a>, <a href="http://technorati.com/tag/subversion" rel="tag">subversion</a>, <a href="http://technorati.com/tag/perforce" rel="tag">perforce</a></small></p>
<p><!--pp-thumb-start--><!--PictPress found no dir /usr/local/apache2/htdocs/wordpress/wp-content/2007/03/subversion-vs-perforce--><!--pp-thumb-end--></p>
<img src="http://commavee.com/?ak_action=api_record_view&id=395&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://commavee.com/2007/03/30/subversion-vs-perforce/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
