views:

6717

answers:

2

This question is a derivative of a previous question posted :here

I have a project that contains code that is consumed by many other projects. Specifically, one folder in this parent project has been branched to dependent child projects.

We have since made changes in the parent project and checked them in. In Source Control Explorer, I right click on the branched folder in the parent project and select "Merge", intending to push the changes to a dependent project. I select the child project as a destination and then select "Latest Version". The wizard informs me "There are no changes to merge."

From my perspective, this isn't true, since the recently updated files are clearly different.

Is there a fundamental misunderstanding of the merge process in TFS here? What do I need to do differently?

Thanks in advance.

A: 

Go to one specific file you know has changed in your "parent" project. Try merging just that file. Don't check anything in; just see what happens.

Something to watch for: The merge tools will not include files that have been added after you branch. You have to branch new files explicitly before you can merge any further changes. If a file is added to both parent and child folders without using a branch operation, the merge tools don't treat them as versions of the same file (and you can't merge changes between them).

Robert Lewis
Corrections:* Newly added files do not have a merge relationship with other branches until they're themselves branched = TRUE. (note: can be a "branch, delete")* The workaround is to merge the specific file = FALSE. Won't work. Correct answer is to merge a parent that does have a relationship.* Files added to both branches in parallel will not merge = FIXED IN 2008. See #1-2 from http://blogs.msdn.com/tfsvcs/archive/2007/05/22/orcas-merge-enhancements.aspx - but note that if the contents don't match, you're stuck with a version conflict that has no "base" info; merging will be a pain.
Richard Berg
+3  A: 

The TFS merge engine relies almost entirely on history, not file contents. This makes it efficient for very large trees, and flexible for tasks like safely cherry-picking changes -- but it also makes answering your question difficult.

The first step is to understand the diagnostic commands tf history, tf merges, and tf merge /candidate. Here is a good introduction: http://blogs.msdn.com/dstfs/archive/2009/04/15/a-note-on-merging-and-the-use-of-tf-merges-tf-merge.aspx

If you are new to branching & merging in TFS then your history is probably not very complex. I think it's likely you'll find your answer with one quick call to tf merges. However, tracing merge history can become extremely convoluted in the general case, so if you have trouble feel free to post back with more details.

Richard Berg