TFS 2010 - 如何在重命名文件的情况下合并到父分支时解决冲突?

时间:2012-10-24 11:27:59

标签: visual-studio-2010 tfs merge tfs2010 branch

我一直在调查在TFS 2010中合并分支时遇到的任何潜在问题。

我尝试过的所有组合都完美地运作,除了一个,我希望有人可以帮助我理解为什么它不起作用和/或我做错了什么。

它是完全可重复的,我已经描述了如下。

问题场景

环境:

  • 两个分支中都有一个C#Library项目,名为MyProject。
  • 每个项目中有两个类,名为MyClass和MyOtherClass。
  • 分支A是父分支,并且已从中创建分支B.

情景:

  • MyClass.cs在分支A中编辑并重命名为MyClassRenamed.cs。
  • 编辑MyClass.cs时,分支B中的更改发生冲突,但保留其名称。

结果:

  • 合并更改会产生一个冲突。
  • 冲突不能自动合并,只表示文件内容存在问题,而不是名称更改。
  • 修复冲突会使您在两种环境中都使用不同的文件,不管文件在解决冲突时有什么名称。

正确的方案

有趣的是,如果情景反转,行为会有所不同,见下文。

  • 编辑MyClass.cs时,分支A中的更改发生冲突,但保留其名称。
  • MyClass.cs在分支B中编辑并重命名为MyClassRenamed.cs。

结果:

  • 合并产生两个冲突。
  • 一个冲突是项目文件,另一个冲突是已重命名的文件。
  • 重命名文件的冲突不能是自动合并,但它会通知名称已更改,并要求提供合并文件的新名称。
  • 然后,您可以合并该文件的更改。
  • 然后,您可以合并项目文件的更改。
  • 修复冲突会使您在两种环境中都使用不同的文件,不管文件在解决冲突时有什么名称。
  • 一切都按预期工作,文件在两个环境中重命名,更改保持同步。

结论

据我所知,唯一的解决方案是避免重命名文件并在合并后手动修复问题,如果有一种自动化方式,我会犹豫不决。

1 个答案:

答案 0 :(得分:1)

让我稍微扩展你的情景。

  • MyClass.cs在分支A中编辑并重命名为MyClassRenamed.cs。

  • 编辑MyClass.cs时,分支B中的更改发生冲突,但保留其名称。

  • 其中一个分支必须合并到Integration分支(假设分支A)

  • 此时,负责分支B的团队决定将更改合并到Integration分支。 作为一种好的做法,在合并到Integration之前,他们应该从Integration下拉变化并合并到分支B.只有在他们这样做并修复冲突之后,他们才会将分支B合并到Integration中。

  • 下次分支A合并时,他们也应该遵循良好做法。

上述做法应解决不同分支机构中文件名不同的问题。