Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于使用subversion进行困难的WinForms合并的建议?_Winforms_Svn_Merge_Tortoisesvn_Ankhsvn - Fatal编程技术网

关于使用subversion进行困难的WinForms合并的建议?

关于使用subversion进行困难的WinForms合并的建议?,winforms,svn,merge,tortoisesvn,ankhsvn,Winforms,Svn,Merge,Tortoisesvn,Ankhsvn,我的经理希望我将一些特定的功能从Subversion主干转移到几个月前测试版使用的分支 这是一个使用WinForms的多项目VS2008解决方案。其他项目主要支持主项目的DLL,主要是UI代码 我们同时使用安克和乌龟 所有项目中都有多个更改,但我只想将部分更改合并到分支中 我一直在使用TortoiseMerge,合并我的主表单,编译,然后根据编译错误合并相关的项目,但进展非常缓慢 我遇到的问题有: 合并对同时涉及.cs和.designer.cs文件的表单的更改 依赖于对其他项目的更改的更改,这

我的经理希望我将一些特定的功能从Subversion主干转移到几个月前测试版使用的分支

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

我们同时使用安克和乌龟

所有项目中都有多个更改,但我只想将部分更改合并到分支中

我一直在使用TortoiseMerge,合并我的主表单,编译,然后根据编译错误合并相关的项目,但进展非常缓慢

我遇到的问题有:

  • 合并对同时涉及.cs和.designer.cs文件的表单的更改
  • 依赖于对其他项目的更改的更改,这些更改会级联到更多的项目,等等

是否有更好的继续方法的建议?

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

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

编辑


我有另一个想法/建议。您可以将测试版目标分支的内容与主干上的内容同步,然后禁用您的上司不希望在测试版分支上使用的功能。这可能意味着比逐块移动功能所需的工作量要少。

在对SVN合并进行了相当多的研究之后,我得出结论,我的最佳方法是手动将所需功能合并到beta分支

这似乎是完全控制流程的最佳方式,并且只得到我想要的更改

Winforms.designer.cs文件是最大的问题。当您添加新控件时,VS设计器会移动很多东西,这会在尝试合并时产生各种冲突,这些冲突很难解决

编辑

下面是我最后做的:

  • 在单独的Visual Studio中打开主干和分支项目 实例
  • 对于每个窗体,将新控件从主干复制并粘贴到分支, 使用VSIDE设计器。这确保了.designer.cs 文件将是有效的
  • 用于逐行合并窗体的.cs文件 基础,所以我只选择了我想要的更改。(在某些情况下- 当我需要所有更改时,我只是复制了整个文件 从主干到分支文件夹。)
  • 试图构建项目,这通常会导致编译错误
  • 基于这些错误,使用WinMerge合并其他文件,直到我有了一个 干净编译
  • 重复上述步骤,直到所有我想要的功能被合并
  • 测试了所有合并的功能

  • 一旦我找到了基本方法,它就进行得非常顺利。

    您有权访问命令行SVN客户端吗?因为那几乎肯定比乌龟快。然后你可以很容易地合并特定的修订。如果你必须合并表单,然后分别合并支持项目,以使它们能够编译,那应该像签入在过去不是非常原子化一样。人们是否一直在进行表单更改,对支持项目进行相关更改,并以不同的修订号将其签入?@pjabbot-签入相当原子化,问题是由我的方法引起的。我只是手动将主干中最新的工作副本与分支的工作副本合并,这似乎越来越不好。我尝试了您的第一个建议(使用Ankh合并向导而不是命令行)。问题是这带来了很多其他的变化,我们没有时间重新测试它们。不过还是值得一试——谢谢你的建议。我建议你试试免费的(比如啤酒)SourceGear DiffMerge()或者其他允许使用3路合并的工具。WinMerge只允许双向合并,因此您的工具无法看到自基本版本以来发生了什么变化:两个版本的差异。DiffMerge增加了一些编程语言的知识,这使得解决冲突比许多简单的基于行的diff工具容易得多。请注意,最新的DiffMerge不会被稳定的AnkhSVN版本自动检测到,因为SourceGear在上次更新中决定重命名该程序以及指向它的所有注册表项。(在AnkhSVN 2.1、2.2和2.3的每日版本中修复)谢谢,我会检查一下。我一直在使用OrtoiseEmerge和AnkhSVN,我相信这是一个3路合并。但是,由于某种原因,它不会将合并的文件保存到分支,我也没有时间来找出原因。