VSTS2010 CTP11: Source Control – Branching management – Part 1

We are all interested about the new killer features in the Architect version, the typed links in Work Items, the editable Workflows in Team Build, and so on.

But we still have to remember that at both at the beginning and the end of the day we have to work with Configuration Management.
The source control of Team System was already good at the very beginning, but for a platform that as for only purpose to be the ultimate ALM product, you must have an excellent one!

Things I miss in TFS 2008:

1) Hard to determine the relationship between branches, the time notion was unusable. You can see what is created from what, but not much more. Lacking of graphical representation.

2) Three ways merge only possible from directly related branches, forcing you to do a baseless merge in other cases.

3) Merge/conflict resolution still not as good and intuitive as it could.

So I’m going to see what changes for these things.

I’m creating a new Team Project called “Test_SCM”, using the Agile Process Template.
Inside $/Test_SCM I create a Main folder, aimed to be a main branch, and then check it in. After I create an “out-of-the-wizard” Winforms application called WinformApp, child of the Main folder and do another check-in.
So far things look like:

Project Structure

Playing a bit with the Source Control, you quickly realize that there’s now a distinction between folders and branches!
The first and most obvious is on the display, a branch has now its own icon, makes you identifying one much quicker than before.

At any time you can convert a given folder to a branch, there’s a new sub-menu Branching and Merging in the contextual menu of the Source Control Explorer:

Branching and Merging

From this menu you can:

Create a new branch from the current one.

Merge changesets from one branch to another. (Nothing new so far…)

View the Hierarchy related to the current branch, sounds like fun! J

Convert the folder to a branch. Warning: this doesn’t lead to a pending changes, but to an instantaneous conversion, and apparently currently irreversible!

Revert a Branch back to a folder (I couldn’t achieve this, the menu item is always disabled).

Reparent a Branch, sounds like changing the parent of a branch, again, I couldn’t do it, the menu item being always disabled.

Now the weird part: you can create a branch from a folder: this will end with two…folders!
See the pictures below, I have two branches: Main_2 and Main_2_V2, but they’re displayed as folder, and looks like it would have been different if it was branches, see after.

Old Branching

Old Branch info

Your Properties dialog is different for a Folder and a Branch item. For the Folder you have exactly the same dialog as for the 2008.

For a Branch, a new dialog appears:

General Property

The Relationships tab is a bit more sophisticate than for a “branch folder”:

So what’s the point of all of this, why two kinds of branches? Well, my guess is there’s now a change in how branches are handled, and for the sake of backward compatibility you still have the old model, coexisting with the new. Looks like I’m going to talk with Microsoft people on this one.

I found out a new limitation: either you’re using a branch or a “folder branch”, you can’t create a new branch from it that is physically stored inside it!

For instance:

$/MySoft_Main
$/ MySoft_Main/MySoft_Version_1_0
ß Can’t happen if you want MySoft_Version_1_0 to be a branch created from MySoft_Main!

This was totally possible in previous version, and now this is something you can’t do anymore.