SVN合并添加参数。世界跆拳道联盟?或者如何进行大型合并?

SVN合并添加参数。世界跆拳道联盟?或者如何进行大型合并?,svn,tortoisesvn,merge,Svn,Tortoisesvn,Merge,我正在为一个分支执行SVN合并,在其中一个文件中我看到: GetQueryReferenceData(int sessionId, Int32 sessionId) 这意味着合并工具只是添加了另一个参数,没有提出任何问题。想象一下,如果它是对子字符串(0)的调用,而在另一个分支中它将是子字符串(0,2)。这是完全不同的行为,它怎么决定选择哪一个呢?幸好它是在编译时出现的 问题是它不会被标记为冲突,而是会自动合并。这是非常危险的行为,如果你没有对每一行代码进行单元测试的机会,你就完蛋了 我做错了

我正在为一个分支执行SVN合并,在其中一个文件中我看到:

GetQueryReferenceData(int sessionId, Int32 sessionId)
这意味着合并工具只是添加了另一个参数,没有提出任何问题。想象一下,如果它是对子字符串(0)的调用,而在另一个分支中它将是子字符串(0,2)。这是完全不同的行为,它怎么决定选择哪一个呢?幸好它是在编译时出现的

问题是它不会被标记为冲突,而是会自动合并。这是非常危险的行为,如果你没有对每一行代码进行单元测试的机会,你就完蛋了

我做错了什么?如何在没有合并工具默默地进行危险更改的情况下进行大型合并?有没有一个合并工具不是语言不可知的


我使用的是Tortoise SVN。

因此,我不熟悉TortoiseSVN接口,但如果存在冲突,标准subversion命令行实用程序将通知您冲突,并允许您指定要使用的版本(“我的”、“他们的”)或是否希望手动解决冲突。但是,请注意,如果合并/更新涉及不同的代码部分(因此没有冲突),则预期将应用任何更改(无论是对签名的更改还是其他更改)。因此,与其问为什么SVN合并了您请求的更改,不如问为什么您的开发人员选择更改更改集中的签名(因为SVN不负责更改集中所做的更改,只负责对这些更改进行版本控制,并根据请求在您的工作目录中应用这些更改)


另外,如果你想阻止其他开发者玩弄诡计,对代码进行破坏性的修改,你可以创建各种“钩子”在提交之前或之后运行,以确保代码编译或执行您希望对代码执行的任何自定义验证,并相应地拒绝更改。

未经询问可能意味着不同的事情。首先,您没有在本地更改该文件,或者没有在函数的特定区域更改该文件,因为只有在您修改了同一行时,才会发生冲突。没有任何工具会将您指向此类更改。或者,您可能使用了一个选项——接受……当然,您应该进行单元测试以确保这种情况的安全。此外,无版本控制工具将更好地处理这种情况,因为没有版本控制工具依赖于语言。也许使用IDE集成并在其中进行合并是个好主意,也许支持更好。当然,在提交此类内容之前,您可以通过svn diff(检查修改)检查合并。

代码更改,签名只是一个示例。当代码被合并工具自动更改时,我会感到害怕,因为如果在不同的行上有冲突的逻辑块,它不会被标记为冲突,只会被合并。这就是问题所在。@HeavyWave,那你为什么要合并?也许您想在应用更改之前运行“svn diff”以查看更改列表?如果我手动查看每一行,这将花费我很长时间。也许有一个合并工具不是像乌龟SVN那样简单愚蠢,也不是语言不可知论者。如果合并工具“更改代码”,合并工具中就有一个巨大的错误。它无权引入任何它正在合并的两个文件中不包含的内容。不是合并工具添加了参数,而是编辑了一个或多个文件的人。