2011-08-15 30 views
2

我的经理希望我将一些特定功能从我们的Subversion主干移到几个月前用于测试版本的分支。建议做一个困难的WinForms与颠覆合并?

这是一个使用WinForms的多项目VS2008解决方案。其他项目主要支持主项目的DLL,这主要是UI代码。

我们同时使用安卡和乌龟。

在所有项目中都有多处更改,但我只想将一些的更改合并到分支中。

我一直在使用TortoiseMerge,合并我的主窗体,编译,然后根据编译错误合并关联的项目,但这个过程非常缓慢。

问题我一直运行到:

  • 更改合并到触摸两个的.cs和了.Designer.cs文件
  • 变化依赖于改变其他项目,但其级联形式更多项目等

任何建议,以更好的方式进行?

+0

你有权访问命令行SVN客户端吗?因为那几乎肯定会比乌龟更快。然后你可以很容易地合并特定的修订版本。 –

+0

如果您不得不合并表单并合并支持项目以便让它们编译,那么它似乎就像过去的checkins不是非常原子的。人们是否正在进行形式变更,对支持项目进行相关修改,并在不同修订版本中检查它们? –

+0

@pjabbot - checkins已经相当原子了,问题是由我的方法造成的。我只是手动将主干中的最新工作副本与分支的工作副本合并 - 越来越多,似乎是一个坏主意。 –

回答

1

经过与SVN合并后,我得出了一个结论,我最好的办法是手动合并我所需的功能到测试版分支。

似乎是完全控制过程的最佳方式,只能得到我想要的更改。

Winforms .designer.cs文件是最大的问题。当你添加新的控件时,VS设计师会大量移动事物,这会在尝试合并时产生各种冲突,这很难解决。

编辑

这里是我落得这样做:

  1. 开业两个主干和分支项目在不同的Visual Studio 实例
  2. 对于每个窗体,复制和粘贴新的控件主干分支, 使用VS IDE设计者。这确保了.designer.cs 文件有效。
  3. 使用WinMerge来合并窗体的.cs文件,在一行一行 的基础上,所以我只拿起我想要的更改。 (在某些情况下 - 时,我想所有的变化 - 我只是复制整个文件(S) 从树干分支的文件夹。)
  4. 试图建立的项目,这通常导致编译基础上
  5. 错误错误,合并其他文件用的WinMerge,直到我有一个 干净编译
  6. 重复以上,直至所有我想要的功能合并
  7. 测试所有合并功能

步骤它去相当顺利,一次我figu冲淡基本方法。

+1

我建议尝试免费(如在啤酒中)SourceGear DiffMerge(http://www.sourcegear.com/diffmerge/)或允许使用3路合并的其他工具。 WinMerge只允许双向合并,所以你的工具看不到自基本版本以来发生了什么变化:两个版本的差异。 DiffMerge增加了一些关于编程语言的知识,它使得解决冲突比许多简单的基于线的差异工具更容易。 –

+1

请注意,最新的DiffMerge不会由稳定的AnkhSVN版本自动检测到,因为SourceGear决定重命名程序以及在上次更新中指向它的所有注册表项。 (修复了AnkhSVN 2.1,2.2和2.3的日常版本) –

+0

谢谢,我会检查一下。我一直在使用TortoiseMerge和AnkhSVN,我相信这是3路合并。但是,由于某种原因,它不会将合并的文件保存到分支,而且我没有时间弄清楚原因。 –

1

如果您有权访问命令行,可以尝试通过指定包含需要移动的特定功能的最小修订版和最大修订版,使用svn diff从每个分支(或中继)生成修补程序。

这些修补程序(可能)不会自动应用于您的目标分支,但返工量将会最小化。当然,你应该从最古老的功能开始,一路顺道。

编辑

我有另一个想法/建议。您可以将测试版目标分支的内容与主干上的内容同步,然后在测试版分支上取消您的老板不想要的功能。这可能意味着比通过修补程序移动功能更少的工作。

+0

我尝试了你的第一个建议(使用Ankh合并向导而不是命令行)。问题是这导致了很多其他的变化,我们没有时间重新测试它们。这是值得一试的 - 谢谢你的建议。 –