Svn 我可以在Subversion中关闭自动合并吗?

Svn 我可以在Subversion中关闭自动合并吗?,svn,tortoisesvn,Svn,Tortoisesvn,我们正在考虑从版本控制系统的签出/编辑/签入样式过渡到Subversion,在评估过程中,我们发现,当您在TortoiseSVN(可能在任何Subversion客户端?)中执行更新操作时,如果存储库中需要应用于您正在编辑的文件的更改没有引起任何冲突,那么它们将自动/静默合并 这让我们有点害怕,因为这种合并虽然不会产生任何编译错误,但可能至少会引入一些不容易检测到的逻辑错误 非常简单的例子:我在一个C#方法中工作,在该方法的后半部分更改了一些逻辑,其他人更改了在该方法开始时初始化变量的值。另一个人

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

这让我们有点害怕,因为这种合并虽然不会产生任何编译错误,但可能至少会引入一些不容易检测到的逻辑错误

非常简单的例子:我在一个C#方法中工作,在该方法的后半部分更改了一些逻辑,其他人更改了在该方法开始时初始化变量的值。另一个人的更改不在我正在处理的代码行中,因此不会有冲突;但是有可能极大地改变方法的输出

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


有没有办法用Subversion/TortoiseSVN做到这一点?还是我们太过拘泥于目前的工作方式,应该让它去做它该做的事…

这里有一个龟的窍门vn:

svn.exe的诀窍是将svn外部差异工具设置为经常失败的程序

svn --diff-cmd=/bin/false

如果外部差异程序失败,svn认为冲突无法解决,不会合并冲突。

最好的解决方法是教育开发人员。
在OrtoiseSVN中执行更新后,它会显示受影响文件的列表。只需双击每个文件,即可获得它们之间的差异。然后,您将能够看到您的版本与最新存储库版本之间发生了哪些变化。

我建议您尽可能学习使用自然Subversion模型。在实践中,我们发现冲突是罕见的,而且您提到的逻辑冲突类型几乎不存在(我想不起在我们的存储库中过去4年中的任何实例)

团队成员应该尽可能小规模地签入更改(同时保持正确性),而不是成批进行一整天的工作,只签入一次。这将减少踩到其他人工作的可能性

如果您担心正在进行的特定更改,Subversion会提供一种锁定机制,以防止对文件进行其他更改。请参阅。

常见问题解答中的章节:

  • 在OrtoiseSVN->Settings->General->Subversion配置文件中,单击编辑按钮
  • 通过添加以下内容更改
    [helpers]
    部分

      diff-cmd = "C:\\false.bat"
    
    (注意双反斜杠)

  • 创建包含两行的文件C:\false.bat

      @type %9
      @exit 1
    
  • 这就是为什么自动化(单元)测试是分布式软件开发的一个基本部分。在您给出的示例中,至少有一个单元测试在svn更新时失败,并向您发出错误警报


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

    在您注意到任何更改之前,svn将很乐意合并您的文件。不管怎样,检查什么发生了变化是个好主意:-)为什么SVN问题的每个答案都是教育?这难道不表明该工具需要大量的部落知识才能运行,并且应该加以修复吗?“然后您将能够看到您的版本和最新的存储库版本之间发生了什么变化”,这可能不是很容易恢复的,特别是当文件是由设计器生成的XML时,比如图形EAI工具。猜测谁在更新由图形EAI工具生成的一些文件时被烧死的要点:-)。他要求改变程序的行为,而不是人类的行为。这是“subversion模型”的一个主要问题。它假设自动合并可能成功。我从来没有找到一个工具,至少有50%的时间可以在没有人工干预的情况下可靠地进行代码合并。我经常签入,但仍然发现SVN每次自动合并时都会破坏很多东西。单元测试非常有用,出色的单元测试可以消除这些类型的问题。我认为关键是,它不是一个完美的工作代码合并工具(没有人工智能,它不可能完美),所以我们希望能够禁用它的纯自动合并部分,至少有一些用户与它交互。单元测试将永远无法捕获这可能导致的一切。这只是一个糟糕的行为。我的+1代表最权威的答案。在这种情况下,svn 1.8会生成空的结果文件。你知道我如何使用类似的东西,但是使用
    svn up