<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>A Branching and Merging Primer</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx</link><description>Hmm, OK I guess I jumped too quickly into using unfamiliar terminology. Let me step back and define some of the concepts/terms a little more and then hopefully that last post will make more sense. The Source Tree Let’s start with what the source tree</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>re: A Branching and Merging Primer</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#492261</link><pubDate>Sun, 13 Nov 2005 19:27:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:492261</guid><dc:creator>Stephan</dc:creator><description>Wow really helpfull :)&lt;br&gt;&lt;br&gt;Thanks for explaining!</description></item><item><title>re: A Branching and Merging Primer</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#492287</link><pubDate>Sun, 13 Nov 2005 22:09:54 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:492287</guid><dc:creator>Tomas Restrepo</dc:creator><description>Excellent couple of post Brian, this is not only very informative, but also gives us some nice ideas as to how to use the product. Thanks!</description></item><item><title>re: A Branching and Merging Primer</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#492290</link><pubDate>Sun, 13 Nov 2005 22:17:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:492290</guid><dc:creator>Vineeth Raja</dc:creator><description>Thanks for the great post. Very useful and clearly explains the concept.</description></item><item><title>re: A Branching and Merging Primer</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#492744</link><pubDate>Tue, 15 Nov 2005 02:56:07 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:492744</guid><dc:creator>Keith Hill</dc:creator><description>Great stuff! Can you elaborate a bit more on how each developer is able to just build from any dir?  The thing I struggle with when thinking about building using path space branching is how to get a single nightly build script to work for multiple developers when they are likely to be building off of different branches.  In SCM products like TFS these different branches manifest themselves as different directories.  With our current SCM system which uses version space branching this isn't a problem because everybody's directory structure is the same even if they are using different branches.</description></item><item><title>re: A Branching and Merging Primer</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#492895</link><pubDate>Tue, 15 Nov 2005 16:21:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:492895</guid><dc:creator>bharry</dc:creator><description>I'm not sure I thoroughly understand your scenario - but a few comments and you can re-ask the question if I missed it.&lt;br&gt;&lt;br&gt;I don't know the details of what we put into the project files to enable the tree to be built at any level.  The TFS build guys did it and I'm sure they'd be happy to blog about it.  I'll send them mail and ask them to post something.&lt;br&gt;&lt;br&gt;We don't have a &amp;quot;single nightly build&amp;quot;.  We have one nightly build for each VBL.  Individual developer branches don't get built by the build lab but rather are built as needed by the developers who use them.  Some set up rolling build machines (continuous integration), others just do it manually when they need a build.&lt;br&gt;&lt;br&gt;Code only makes it into an &amp;quot;official&amp;quot; build when the code has been RI'd into one of the build lab supported VBLs.</description></item><item><title>re: A Branching and Merging Primer</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#492983</link><pubDate>Tue, 15 Nov 2005 19:27:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:492983</guid><dc:creator>Keith Hill</dc:creator><description>Our development teams are small enough usually where we have a single KornShell script checked into $/ProjectName/Build/Scripts called DevNightlyBuild.ksh that rebuilds on a developer's PC every night.  Each dev sets it up in the task scheduler passing in their email address as the one and only parameter (to mail failure messages).  This works great when everyone's directory structure (relative to the project root) is identical.  I'm just trying to wrap my mind around how to make this work when folks start using private branches in a path spaced branching SCM tool.  All of a sudden each developer may not want to build $/proj/Trunk/Src/Foo but instead build $/proj/Branches/Dev/Joe/Foo.  I don't think this is insurmountable or anything.  I just need to ponder on this some more.  :-)</description></item><item><title>re: A Branching and Merging Primer</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#493230</link><pubDate>Wed, 16 Nov 2005 06:13:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:493230</guid><dc:creator>bharry</dc:creator><description>Ahh, I think I understand the heart of your question.  Our build environment is a command shell that is initialized by running a script called razzle.cmd that sits in:&lt;br&gt;&lt;br&gt;&amp;lt;vbl root&amp;gt;\tools&lt;br&gt;&lt;br&gt;It knows where it is relative to the root of the VBL (it's always in the tools subdirectory) and sets an environment variable to the root of the workspace on the user's local machine.  Then all of our build scripts are parameterized by that environment variable.&lt;br&gt;&lt;br&gt;So, using an example.  I may want to enlist in $/VisualStudio/lab23.  It contains all of the tools, publics, source, etc.  I map the directories I need into my workspace:&lt;br&gt;&lt;br&gt;$/VisualStudio/lab23/tools -&amp;gt; d:\dd\tools&lt;br&gt;$/VisualStudio/lab23/vset -&amp;gt; d:\dd\vset&lt;br&gt;and so forth for all of the folders I need.&lt;br&gt;&lt;br&gt;I then open a command prompt and run d:\dd\tools\razzle (optionally passing a parameter indicating whether I want debug or retail).  It sets up environment variables, including one calls NTROOT (Don't ask why it's called this.  It's legacy because this system started in Windows).  It will set&lt;br&gt;&lt;br&gt;NTROOT = d:\dd&lt;br&gt;&lt;br&gt;Because it knows it's always right below the root.  Now I can cd to any folder in the tree and build it and it knows where the root is (and can therefore find tools, public, etc) because of the environment variable.&lt;br&gt;&lt;br&gt;As a side note, I'll mention that not every private branch includes a whole VBL.  It's too much stuff to branch for small projects - something like 500,000 files.  It's not uncommon to branch $/VisualStudio/private/FeatureX from $/VisualStudio/lab23dev (or one of the other full VBLs) by only branching the subset of subfolders that you need and then have clients create a workspace that maps from both branches.  For example:&lt;br&gt;&lt;br&gt;$/VisualStudio/lab23dev/tools -&amp;gt; d:\dd\tools&lt;br&gt;$/VisualStudio/private/FeatureX/vset -&amp;gt; d:\dd\vset&lt;br&gt;&lt;br&gt;I hope this helps.&lt;br&gt;&lt;br&gt;Brian</description></item><item><title>re: A Branching and Merging Primer</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#493851</link><pubDate>Thu, 17 Nov 2005 15:27:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:493851</guid><dc:creator>Graham Allwood</dc:creator><description>Hey, this is cool, learning from people with such experience has to be a winner; thanks.&lt;br&gt;&lt;br&gt;A question though. You say the Public folder contains all libs and assemblies the projects reference, including Framework and SDKs. I'm sure the answer is yes, but does this mean that say one of your projects needs the mobile 2005 SDK, rather then referencing something from the GAC (which is why the SDK installs its assemblies), you would copy that assembly from the default installed folder to the Public folder (or a subfolder in here) and reference that instead.&lt;br&gt;&lt;br&gt;I can see that advantage for doing this with most SDK's, but the Framework? Surely this is required on the build machine anyway?&lt;br&gt;&lt;br&gt;Wait, hang on, you also copy the compilers to the tools folder don't you, then I bet you reference these from the build script.</description></item><item><title>re: A Branching and Merging Primer</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#494098</link><pubDate>Fri, 18 Nov 2005 00:19:47 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:494098</guid><dc:creator>bharry</dc:creator><description>Right, we copy everything.  The .NET Framework, all SDKs, compilers and everything to the version controlled tree.  This way the tree is pretty much entirely stand alone and makes almost no assumptions about the machine's environment.  You pretty much just need a properly installed copy of Windows and the version control tools (so you get get all the rest) and you are good to go.&lt;br&gt;&lt;br&gt;It makes the tree kind of big but gives us a lot of flexibility to be building things against different versions of the Framework, update the tools and distribute them to the team in a controlled fashion, etc.&lt;br&gt;&lt;br&gt;Brian</description></item><item><title>re: A Branching and Merging Primer</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#494346</link><pubDate>Fri, 18 Nov 2005 11:24:31 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:494346</guid><dc:creator>Graham Allwood</dc:creator><description>Another question for you Brian...&lt;br&gt;&lt;br&gt;Do you think that would could ever use Team Build to run your nightly builds are is the Razzle script a little too complicated? Sorry, this is a little off topic (i.e. not branching or merging).</description></item><item><title>re: A Branching and Merging Primer</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#494426</link><pubDate>Fri, 18 Nov 2005 17:17:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:494426</guid><dc:creator>bharry</dc:creator><description>We've actually already integrated some of TFS Build into our nightly build process.  We don't use the TFS build launching capability (we really don't want random people around the division starting builds anyway).&lt;br&gt;&lt;br&gt;Over the next 6 months or so we will be integrating more of it.  Our build is big enough and complicated enough that I don't forsee us using any TFS Build &amp;quot;out of the box&amp;quot; configuration in the near term.&lt;br&gt;&lt;br&gt;We designed TFS Build to be more of a set of building blocks than a turn key solution.  We recognize that build processes can be very complex and customized to the needs of each organization.  As a result we tried to deliver discrete components for things like labeling the source, generating a build number, running tests, updating work items, etc.  This way people can integrate these tasks into what ever custom build process they have.&lt;br&gt;&lt;br&gt;The &amp;quot;out of the box&amp;quot; TFS build configuration will work for smaller projects and will save a lot of time putting together a build process.  In future versions, we will continue to expand the scope of what the out of the box solution can handle (for example adding support for parallelization of the build process, tasks for code signing, etc).</description></item><item><title>Quickie: bharry on VBLs and branching</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#581275</link><pubDate>Sat, 22 Apr 2006 16:36:20 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:581275</guid><dc:creator>Stuart Celarier</dc:creator><description>A couple of posts by Brian Harry (bharry) from November 2005 about virtual build labs and branching on the TFS project...</description></item><item><title>Pozo T??cnico  &amp;raquo; Blog Archive   &amp;raquo; Branching en VSS</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#717397</link><pubDate>Thu, 24 Aug 2006 17:54:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:717397</guid><dc:creator>Pozo T??cnico  » Blog Archive   » Branching en VSS</dc:creator><description>PingBack from &lt;a rel="nofollow" target="_new" href="http://www.pozotecnico.com/?p=143"&gt;http://www.pozotecnico.com/?p=143&lt;/a&gt;</description></item><item><title>Branching strategies for TFS</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#751160</link><pubDate>Wed, 13 Sep 2006 00:52:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:751160</guid><dc:creator>My VSTS Blog</dc:creator><description>There has been a few discussions (Eg. Brian Harry , Martin Woodward , MSDN Forums ) and even a session</description></item><item><title>re: A Branching and Merging Primer</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#776114</link><pubDate>Fri, 29 Sep 2006 00:44:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:776114</guid><dc:creator>Johan Bergens</dc:creator><description>Hi!&lt;br&gt;&lt;br&gt;A bit late, but...&lt;br&gt;I would like to see a clarification of how you handle the potentially large number of branch folders below &amp;quot;branches&amp;quot; (or the root). Do you create a nested structure from the beginning and use the leaf nodes or do you keep all branch folder below a common parent (the root or &amp;quot;branches&amp;quot;)?&lt;br&gt;&lt;br&gt;I tried to ask the same question in another forum but tries to rephrase it here to make it easier to understand and to connect to your example.&lt;br&gt;&lt;br&gt;&lt;a rel="nofollow" target="_new" href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=773007&amp;amp;SiteID=1"&gt;http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=773007&amp;amp;SiteID=1&lt;/a&gt;</description></item><item><title>re: A Branching and Merging Primer</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#776924</link><pubDate>Fri, 29 Sep 2006 16:59:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:776924</guid><dc:creator>bharry</dc:creator><description>This has been evolving some as our number of branches grows. &amp;nbsp;The current organization of branches for Orcas (our next version) looks something like this:&lt;br&gt;&lt;br&gt;$/Orcas - The Team Project&lt;br&gt;&lt;br&gt;$/Orcas/Main - The main branch from which the final product is built.&lt;br&gt;&lt;br&gt;$/Orcas/PU - Contains a flat list of branches - one for each product unit. &amp;nbsp;Under here each product unit has a branch (e.g. $/Orcas/PU//VB and $/Orcas/PU/VSTS, etc) where work from each of their feature teams is merged and tested before being merged into $/Orcas/Main.&lt;br&gt;&lt;br&gt;$/Orcas/Feature - For Orcas, each &amp;quot;feature&amp;quot; is being developed in its own branch for isolation from the churn induced by other feature teams. &amp;nbsp;This folder contains a branch for each feature team to work in (e.g. $/Orcas/Feature/LoadTest or $/Orcas/Feature/VCClient01, etc) before merging their changes into their PU branch. &amp;nbsp;Today this is a flat list under $/Orcas/Feature but you could imagine creating some hierarchy to manage it.&lt;br&gt;&lt;br&gt;$/Orcas/private - This is a container for random &amp;quot;personal&amp;quot; branches that anyone wants to create and use for a period of time.&lt;br&gt;&lt;br&gt;Hope this helps,&lt;br&gt;&lt;br&gt;Brian</description></item><item><title>Microsoft SCM 的策略 -- from BHarry</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#1498807</link><pubDate>Sat, 20 Jan 2007 18:52:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1498807</guid><dc:creator>Refines.Info["Polo Lee"]</dc:creator><description>&lt;p&gt;bharry's WebLog : A Branching and Merging Primer Branch structure in Developer Division at Microsoft&lt;/p&gt;
</description></item><item><title>Please help: Merge options are disabled </title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#1627056</link><pubDate>Thu, 08 Feb 2007 16:01:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1627056</guid><dc:creator>guyRonen</dc:creator><description>&lt;p&gt;I am using TFS.&lt;/p&gt;
&lt;p&gt;I have created a brunch for project proj1 which is called proj1B.&lt;/p&gt;
&lt;p&gt;After modifing one of the files in proj1B, chek-in and merge to proj1, the modification was automatically merged into proj1.&lt;/p&gt;
&lt;p&gt;If I modify (adding a method) on of the files in proj1, then modifying it also in proj1B (also adding a method), both check-in ---&amp;gt; When I come to merge proj1B to proj1 i get the conflicts dialog (which is fine) with the &amp;quot;Auto Merge All&amp;quot; button DISABLED. When I click on the &amp;quot;Resolve&amp;quot; button, I get the resolve options dialog with the first two merge options also DISABLED (&amp;quot;Merge changes for me&amp;quot; and &amp;quot;Merge changes in merge tool&amp;quot;).&lt;/p&gt;
&lt;p&gt;I have full permissions.&lt;/p&gt;
</description></item><item><title>Resources for Today's TFS Live Meeting</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#1772980</link><pubDate>Wed, 28 Feb 2007 11:39:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1772980</guid><dc:creator>Microsoft UK Developer Tools Team</dc:creator><description>&lt;p&gt;TEAM FOUNDATION SERVER Team System Overview &lt;a rel="nofollow" target="_new" href="http://msdn2.microsoft.com/en-gb/teamsystem/aa718836.aspx"&gt;http://msdn2.microsoft.com/en-gb/teamsystem/aa718836.aspx&lt;/a&gt;&lt;/p&gt;</description></item><item><title>re: A Branching and Merging Primer</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#8393913</link><pubDate>Mon, 14 Apr 2008 21:33:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8393913</guid><dc:creator>Neha</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;What if I want to branch only a few items from Parent into the Child and not everything that's there under Parent. How to accomplish that?&lt;/p&gt;
&lt;p&gt;I tried two ways of branching:-&lt;/p&gt;
&lt;p&gt;1. Create a New Team Project and folow the wizard. It will prompt you to branch from an existing TeamProject. You may choose that or skip. If you choose it, it will branch everything from Parent to Child.&lt;/p&gt;
&lt;p&gt;2. Just create an empty TeamProject. Right click the Parent and select Branch. Enter the appropriate paths.&lt;/p&gt;
&lt;p&gt;Option 1 maintains the links b/w the Parent and Branch but Option 2 doesn't. Do you know a way to branch just a few files from Parent to Child but with ability to keep the links?&lt;/p&gt;
&lt;p&gt;thanks!&lt;/p&gt;
</description></item><item><title>bharry's WebLog : A Branching and Merging Primer</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#8566740</link><pubDate>Sat, 31 May 2008 17:57:53 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8566740</guid><dc:creator>Dating</dc:creator><description>&lt;p&gt;Hmm, OK I guess I jumped too quickly into using unfamiliar terminology. Let me step back and define some of the concepts/terms a little more and then hopefully that last post will make more sense. The Source Tree Let’s start with what the source tree&lt;/p&gt;
</description></item><item><title>bharry's WebLog : A Branching and Merging Primer</title><link>http://blogs.msdn.com/bharry/archive/2005/11/13/492258.aspx#8576313</link><pubDate>Fri, 06 Jun 2008 00:37:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8576313</guid><dc:creator>Weddings</dc:creator><description>&lt;p&gt;Hmm, OK I guess I jumped too quickly into using unfamiliar terminology. Let me step back and define some of the concepts/terms a little more and then hopefully that last post will make more sense. The Source Tree Let’s start with what the source tree&lt;/p&gt;
</description></item></channel></rss>