关于svn:我可以关闭Subversion中的自动合并功能吗?

关于svn:我可以关闭Subversion中的自动合并功能吗?

Can I turn off automatic merging in Subversion?

我们正在考虑从版本控制系统的签出/编辑/签入样式过渡到Subversion,在评估过程中,我们发现,当您在TortoiseSVN中(可能是在任何Subversion客户端中)执行Update操作时,如果存储库中需要应用到您正在编辑的文件的更改没有引起任何冲突,则它们将被自动/静默合并。

这使我们有些害怕,因为这种合并有可能在不产生任何编译错误的情况下,至少会引入一些逻辑错误,这些错误可能不容易被检测到。

非常简单的示例:我正在使用C#方法更改该方法后半部分的某些逻辑,而其他人则将变量初始化为该方法开始时初始化的值。另一个人的更改不在我正在编写的代码行中,因此不会发生冲突;但可能会大大改变方法的输出。

我们希望的情况是,如果需要进行合并,则将显示两个文件,并至少显示一个简单的接受/拒绝更改选项,以便至少我们知道某些内容已更改,并且可以选择是否影响我们的代码。

有没有办法用Subversion / TortoiseSVN做到这一点?还是我们过多地停留在目前的工作方式上,应该让它做事情...


在常见问题解答中:
如何防止Subversion进行自动合并?

  • In TortoiseSVN->Settings->General->Subversion configuration file, click on the edit button.
  • Change the [helpers] section by adding

    1
      diff-cmd ="C:\\\\false.bat"

    (note the double backslash)

  • Create the file C:\\false.bat which contains two lines

    1
    2
      @type %9
      @exit 1

  • 这是TortoiseSVN的一个技巧:

    如何在Subversion中关闭"自动合并"

    svn.exe的窍门是将svn外部差异工具设置为不断失败的程序。

    1
    svn --diff-cmd=/bin/false

    如果外部diff程序失败,svn会得出结论认为无法解决冲突,因此不会合并冲突。


    解决此问题的最佳方法是教育开发人员。
    在TortoiseSVN中进行更新后,它将显示受影响文件的列表。只需双击每个文件,即可发现它们之间的差异。然后,您将能够看到您的版本与最新存储库版本之间的更改。


    我建议您尽可能学习使用自然的Subversion模型。在实践中,我们发现冲突是很少见的,并且您谈论的逻辑冲突类型几乎不存在(我无法在存储库中回顾过去四年中的一个实例)。

    团队成员应尽可能小范围地检入更改(同时保持正确性),而不是整天检查一次以将其检入。这将减少踩别人工作的可能性。

    如果您担心某个特定更改,则您正在执行Subversion确实提供了一种锁定机制,可以防止对该文件进行其他更改。请参阅《红皮书》中有关锁定的章节。


    这就是为什么自动化(单元)测试是分布式软件开发的基本部分的原因。在您给出的示例中,至少一个单元测试应在svn update上失败,并警告您该错误。

    记住Subversion是什么:版本控制系统,而不是完美工作的代码合并工具。


    推荐阅读