<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Version Control: developing on branches rather than master/trunk</title>
	<atom:link href="http://alex.kavanagh.name/2010/04/version-control-dev-on-branches/feed/" rel="self" type="application/rss+xml" />
	<link>http://alex.kavanagh.name/2010/04/version-control-dev-on-branches/</link>
	<description>Random thoughts, differential progress ...</description>
	<lastBuildDate>Wed, 11 May 2011 11:50:54 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: alex</title>
		<link>http://alex.kavanagh.name/2010/04/version-control-dev-on-branches/comment-page-1/#comment-1032</link>
		<dc:creator>alex</dc:creator>
		<pubDate>Mon, 21 Feb 2011 17:32:29 +0000</pubDate>
		<guid isPermaLink="false">http://alex.kavanagh.name/?p=95#comment-1032</guid>
		<description>It&#039;s really about breakage, or rather your commit breaking somebody else&#039;s code. I like to commit often which is why I use Git (but any DVCS will do). In effect, I&#039;m always developing on a branch. Personally, I like trunk/master to always pass all it&#039;s tests, and this isn&#039;t likely if non-feature-complete commits are going back to trunk/master.

However, there&#039;s nothing intrinsically wrong with the approach you suggest.</description>
		<content:encoded><![CDATA[<p>It&#8217;s really about breakage, or rather your commit breaking somebody else&#8217;s code. I like to commit often which is why I use Git (but any DVCS will do). In effect, I&#8217;m always developing on a branch. Personally, I like trunk/master to always pass all it&#8217;s tests, and this isn&#8217;t likely if non-feature-complete commits are going back to trunk/master.</p>
<p>However, there&#8217;s nothing intrinsically wrong with the approach you suggest.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: allard</title>
		<link>http://alex.kavanagh.name/2010/04/version-control-dev-on-branches/comment-page-1/#comment-1030</link>
		<dc:creator>allard</dc:creator>
		<pubDate>Mon, 21 Feb 2011 10:53:19 +0000</pubDate>
		<guid isPermaLink="false">http://alex.kavanagh.name/?p=95#comment-1030</guid>
		<description>Hi,
Why would you need a trunk/tags at all?  Can&#039;t we just say we start developing at version/v1.0. All bugs and issues can then be connected to the version where you want it fixed. Any large development can still be done in branches, but the goal is to deliver v1.0 anyway, so that&#039;s where you commit. Then someday you install a customer version (which is of course v1.0), that&#039;s when you create v1.1 (a tag of v1.0) and continue developing there. If you discover some bug or even a new feature that simply has to be included on the already installed version v1.0, then this can be done easily, and can be merged to v1.1 as well.  This can be continued on and on. The only thing is that all developers need to know in which version to do the development.
Is there anything against this approach?</description>
		<content:encoded><![CDATA[<p>Hi,<br />
Why would you need a trunk/tags at all?  Can&#8217;t we just say we start developing at version/v1.0. All bugs and issues can then be connected to the version where you want it fixed. Any large development can still be done in branches, but the goal is to deliver v1.0 anyway, so that&#8217;s where you commit. Then someday you install a customer version (which is of course v1.0), that&#8217;s when you create v1.1 (a tag of v1.0) and continue developing there. If you discover some bug or even a new feature that simply has to be included on the already installed version v1.0, then this can be done easily, and can be merged to v1.1 as well.  This can be continued on and on. The only thing is that all developers need to know in which version to do the development.<br />
Is there anything against this approach?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: alex</title>
		<link>http://alex.kavanagh.name/2010/04/version-control-dev-on-branches/comment-page-1/#comment-406</link>
		<dc:creator>alex</dc:creator>
		<pubDate>Sat, 25 Sep 2010 18:40:43 +0000</pubDate>
		<guid isPermaLink="false">http://alex.kavanagh.name/?p=95#comment-406</guid>
		<description>You raise some interesting points which I think are a feature of any non-locking version control system. You&#039;re right, it does have to be handled carefully.  I think that the main thing is to ensure that the main trunk is controlled by one or two people who can test the merges before the are updated to the trunk. Obviously, this relies on a good test suite.

The SVN tag==branch is probably a design flaw.  Tags &lt;em&gt;ought&lt;/em&gt; to be immutable, and so it shouldn&#039;t really be able to checkout a tag, work on it and then update to that tag.

I&#039;m still pondering whether &#039;develop&#039; in branches is the right idea.  On subversion, branches feel to heavyweight, whereas it seems really easy in git to develop in a branch and then quickly merge back in.

So on reflection, in subversion, we develop on trunk, but ensure that it always &#039;works&#039; by using a post-commit hook, but in git I tend to develop on a branch.</description>
		<content:encoded><![CDATA[<p>You raise some interesting points which I think are a feature of any non-locking version control system. You&#8217;re right, it does have to be handled carefully.  I think that the main thing is to ensure that the main trunk is controlled by one or two people who can test the merges before the are updated to the trunk. Obviously, this relies on a good test suite.</p>
<p>The SVN tag==branch is probably a design flaw.  Tags <em>ought</em> to be immutable, and so it shouldn&#8217;t really be able to checkout a tag, work on it and then update to that tag.</p>
<p>I&#8217;m still pondering whether &#8216;develop&#8217; in branches is the right idea.  On subversion, branches feel to heavyweight, whereas it seems really easy in git to develop in a branch and then quickly merge back in.</p>
<p>So on reflection, in subversion, we develop on trunk, but ensure that it always &#8216;works&#8217; by using a post-commit hook, but in git I tend to develop on a branch.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Corfiot</title>
		<link>http://alex.kavanagh.name/2010/04/version-control-dev-on-branches/comment-page-1/#comment-349</link>
		<dc:creator>Corfiot</dc:creator>
		<pubDate>Tue, 31 Aug 2010 14:45:41 +0000</pubDate>
		<guid isPermaLink="false">http://alex.kavanagh.name/?p=95#comment-349</guid>
		<description>I mostly agree with you, however the solution you are moving to needs a bit more refinement. Between steps 2-3 and 5-6, i.e. when merging, how do you know that just after you merged and while you&#039;re testing that there has been no change in the trunk? If you don&#039;t come up with a way to synchronize merges you&#039;ll end up chasing your tail trying to keep track of which fix is in what branch. So, I guess you may need to implement some kind of freeze-before-merge system.

If everyone develops in branches exclusively, this is easier as trunk will not be modified on a daily basis by any team... And working on tickets is a must so you keep track of the feature and its patch-set.

As for releases, I&#039;d definitely tag the release on the trunk.  Now if you are on release 2.5 and you get a bug on 2.1 that was fixed on 2.4, you need to backport the fix for customers using 2.1-2.3. Then you simply work on the &quot;tag&quot;. At least in SVN the tag IS a branch. So you check it out and fix it. Downside: you have to do this for 2.2 as well (all intermediate tags).</description>
		<content:encoded><![CDATA[<p>I mostly agree with you, however the solution you are moving to needs a bit more refinement. Between steps 2-3 and 5-6, i.e. when merging, how do you know that just after you merged and while you&#8217;re testing that there has been no change in the trunk? If you don&#8217;t come up with a way to synchronize merges you&#8217;ll end up chasing your tail trying to keep track of which fix is in what branch. So, I guess you may need to implement some kind of freeze-before-merge system.</p>
<p>If everyone develops in branches exclusively, this is easier as trunk will not be modified on a daily basis by any team&#8230; And working on tickets is a must so you keep track of the feature and its patch-set.</p>
<p>As for releases, I&#8217;d definitely tag the release on the trunk.  Now if you are on release 2.5 and you get a bug on 2.1 that was fixed on 2.4, you need to backport the fix for customers using 2.1-2.3. Then you simply work on the &#8220;tag&#8221;. At least in SVN the tag IS a branch. So you check it out and fix it. Downside: you have to do this for 2.2 as well (all intermediate tags).</p>
]]></content:encoded>
	</item>
</channel>
</rss>

