1

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

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

它是完全可重现的,我在下面描述了如何。

问题场景

环境:

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

场景:

  • MyClass.cs 在分支 A 中被编辑并重命名为 MyClassRenamed.cs。
  • MyClass.cs 在分支 B 中使用冲突更改进行编辑,但保留其名称。

结果:

  • 合并更改会产生一个冲突。
  • 冲突不能自动合并,它仅表明文件内容存在问题,而不是名称更改。
  • 修复冲突会在两种环境中为您留下不同名称的文件,尽管解决冲突时文件具有什么名称。

正确的场景

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

  • MyClass.cs 在分支 A 中使用冲突更改进行编辑,但保留其名称。
  • MyClass.cs 在分支 B 中被编辑并重命名为 MyClassRenamed.cs。

结果:

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

结论

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

4

1 回答 1

1

让我稍微扩展一下你的场景。

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

  • MyClass.cs 在分支 B 中使用冲突更改进行编辑,但保留其名称。

  • 这些分支之一必须合并到集成分支(假设是分支 A)

  • 此时,B 分支上的团队决定将更改合并到集成分支中。作为一个好的实践,在合并到集成之前,他们应该从集成中拉下更改并合并到分支 B。只有在他们这样做并修复冲突之后,他们才会将分支 B 合并到集成中。

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

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

于 2012-10-24T12:07:35.067 回答