【发布时间】:2012-10-14 10:32:48
【问题描述】:
我一直在调查在 TFS 2010 中合并分支时遇到的任何潜在问题。
我尝试过的所有组合都完美无缺,除了一个,我希望有人能帮助我理解为什么它不起作用和/或我做错了什么。
它是完全可重现的,我已经在下面描述了。
问题场景
环境:
- 两个分支中都有一个 C# 库项目,名为 MyProject。
- 每个项目中有两个类,分别称为 MyClass 和 MyOtherClass。
- 分支 A 是父分支,分支 B 是从它创建的。
场景:
- MyClass.cs 在分支 A 中被编辑并重命名为 MyClassRenamed.cs。
- 编辑 MyClass.cs,在分支 B 中发生冲突更改,但保留其名称。
结果:
- 合并更改会产生一个冲突。
- 冲突不能自动合并,它只表示文件内容有问题,而不是名称更改。
- 解决冲突后,无论文件在解决冲突时使用什么名称,都会在两种环境中使用不同名称的文件。
正确的场景
有趣的是,如果场景颠倒,行为会有所不同,见下文。
- 编辑 MyClass.cs,在分支 A 中发生冲突更改,但保留其名称。
- MyClass.cs 在分支 B 中被编辑并重命名为 MyClassRenamed.cs。
结果:
- 合并会产生两个冲突。
- 一个冲突是项目文件,另一个是重命名的文件。
- 重命名文件的冲突不能自动合并,但它会通知名称已更改并要求合并文件的新名称。
- 然后您可以合并对该文件的更改。
- 然后您可以合并项目文件的更改。
- 解决冲突后,无论文件在解决冲突时使用什么名称,都会在两种环境中使用不同名称的文件。
- 一切都按预期工作,文件在两个环境中都被重命名,并且更改保持同步。
结论
据我所知,唯一的解决方案是避免重命名文件并在合并后手动修复问题,如果有自动化的方法可以做到这一点,我会犹豫不决。
【问题讨论】:
标签: visual-studio-2010 tfs merge branch