Wednesday, March 14, 2012

Baseless merge in TFS 2010

Hello World,

              I was recently involved in a major rewrite of one of our products and needed to prep a release candidate. As most organisations do, our ALM (Application Lifecycle Managemet) practices require that changes be merged all the way up to the Main branch and then a branch be derived out of that with the "Release X.x" format. (if you haven't guessed already, X is the major version and x the minor one).
So, this was a major rewrite and it had to be a baseless merge. Now as per MSDN, a baseless merge is "process of merging items that are not directly branched from each other" [MSDN]; whilst my dev branch was related all the way up to Main, the reason I decided it had to be a baseless merge is because I did not want TFS to bother about the relationship of the files in the branches. For example, if I have renamed a file, this should be viewed as a deleted file and a new file be added in the branch.
            A baseless merge also requires more manual conflict resolutions than when you perform a normal merge but I was fine with that as I required more control in liu of the extra manual work.
The way things are, basless merge can only be done through command prompt so you need to fire up the Visual studio command prompt [for the heck of it, the VS command prompt just sets some environment variables so you don't have to type the entire path to VS executables]. The details are there in the MSDN link so I'll just mention my experiences:

  1. File deletions do not always get merged up (This blog suggests that the TFS server must be SP1 or higher), so to be 100% confident, always compare the source and target branches of merge after the merge
  2. If files in the target branch are locked (e.g. binary files are locked if some other user has checked them out for edit), you can use the TFS Sidekicks tool to undo the checkout. Caveat: you should have administrator access to the team project
Happy Coding!

No comments:

Post a Comment