Visual studio 2010 TFS 2010-当合并到重命名文件的父分支时,如何解决冲突?

Visual studio 2010 TFS 2010-当合并到重命名文件的父分支时,如何解决冲突?,visual-studio-2010,tfs,merge,branch,Visual Studio 2010,Tfs,Merge,Branch,我一直在调查在TFS 2010中合并分支时遇到的任何潜在问题 除了一个组合外,我尝试过的所有组合都非常有效,我希望有人能帮助我理解为什么组合不起作用和/或我做得不正确 它是完全可复制的,我在下面描述了如何复制 问题场景 环境: 两个分支中都有一个C#Library项目,称为MyProject 每个项目中有两个类,称为MyClass和MyOtherClass 分支A是父分支,分支B是从它创建的 情景: MyClass.cs在分支A中编辑并重命名为MyClassRename.cs MyClas

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

除了一个组合外,我尝试过的所有组合都非常有效,我希望有人能帮助我理解为什么组合不起作用和/或我做得不正确

它是完全可复制的,我在下面描述了如何复制

问题场景

环境:

  • 两个分支中都有一个C#Library项目,称为MyProject
  • 每个项目中有两个类,称为MyClass和MyOtherClass
  • 分支A是父分支,分支B是从它创建的
情景:

  • MyClass.cs在分支A中编辑并重命名为MyClassRename.cs
  • MyClass.cs在分支B中编辑时发生了冲突更改,但保留了其名称
结果:

  • 合并更改会产生一个冲突
  • 冲突不能自动合并,它只表明文件内容存在问题,而不是名称更改
  • 修复冲突会使您在两种环境中的文件名称不同,而不管解决冲突时文件的名称如何
正确的场景

有趣的是,如果情况相反,行为会有所不同,见下文

  • MyClass.cs在分支a中编辑时发生了冲突更改,但保留了其名称
  • MyClass.cs在分支B中编辑并重命名为MyClassRename.cs
结果:

  • 合并产生两种冲突
  • 一个冲突是项目文件,另一个冲突是已重命名的文件
  • 重命名文件的冲突无法自动合并,但它会通知名称已更改,并要求为合并文件提供新名称
  • 然后可以合并该文件的更改
  • 然后可以合并项目文件的更改
  • 修复冲突会使您在两种环境中的文件名称不同,而不管解决冲突时文件的名称如何
  • 一切正常,文件在两种环境中都被重命名,更改保持同步
结论


就我所见,唯一的解决方案是避免重命名文件,并在合并后手动修复问题,如果有一种自动方式可以做到这一点,我会犹豫是否要这样做。

让我稍微扩展一下您的场景

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

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

  • 其中一个分支必须合并到集成分支(比如分支A)

  • 此时,从事分支B工作的团队决定将更改合并到集成分支中作为一种良好的做法,在合并到集成中之前,他们应该从集成中取出更改并合并到分支B中。只有这样做并修复冲突后,他们才会将分支B合并到集成中。

  • 下一次合并分支A时,它们也应该遵循良好的实践


上述实践应该可以解决不同分支中文件名不同的问题。

让我稍微扩展一下您的场景

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

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

  • 其中一个分支必须合并到集成分支(比如分支A)

  • 此时,从事分支B工作的团队决定将更改合并到集成分支中作为一种良好的做法,在合并到集成中之前,他们应该从集成中取出更改并合并到分支B中。只有这样做并修复冲突后,他们才会将分支B合并到集成中。

  • 下一次合并分支A时,它们也应该遵循良好的实践


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

Aleksey是正确的。使用我的示例,在将分支B的更改合并到分支A之前,我忘记了将分支A的更改合并到分支B。一旦我这样做,一切都按预期进行。Aleksey是正确的。以我的例子来说,在将分支B的更改合并到分支A之前,我忘记了将分支A的更改合并到分支B。一旦我这样做了,一切都按预期进行。