19

我们正在考虑从版本控制系统的签出/编辑/签入风格转移到 Subversion,在评估期间我们发现当您在 TortoiseSVN 中执行更新操作时(并且可能在任何 Subversion 客户端中?),如果需要将存储库中的更改应用于您一直在编辑的文件不会导致任何冲突,那么它们将被自动/静默合并。

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

非常简单的示例:我正在使用 C# 方法更改方法后半部分中的一些逻辑,而其他人更改了在方法开始时初始化变量的值。其他人的更改不在我正在处理的代码行中,因此不会发生冲突;但是可以显着改变方法的输出。

我们希望的情况是,如果需要进行合并,那么将显示这两个文件并至少提供一个简单的接受/拒绝更改选项,这样至少我们知道某些事情已经发生了变化并且可以选择查看它是否会影响我们的代码。

有没有办法用 Subversion/TortoiseSVN 做到这一点?或者我们是否过于拘泥于我们目前的工作方式,应该让它做它的事情......

4

5 回答 5

14

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

  1. 在 TortoiseSVN->Settings->General->Subversion 配置文件中,点击编辑按钮。
  2. [helpers]通过添加更改部分

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

    (注意双反斜杠)

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

      @type %9
      @exit 1
    
于 2011-10-06T10:25:13.320 回答
10

这是 TortoiseSVN 的一个技巧:

如何在 Subversion 中关闭“自动合并”

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

svn --diff-cmd=/bin/false

如果外部 diff 程序失败,svn 会得出结论,冲突是无法解决的,不会合并它。

于 2008-09-10T11:42:48.837 回答
6

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

于 2008-09-10T12:09:28.883 回答
1

如果可能的话,我建议你应该学习使用自然的 Subversion 模型。在实践中,我们发现冲突很少见,您所说的逻辑冲突类型几乎不存在(我不记得我们存储库中过去 4 年的实例)。

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

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

于 2008-09-10T12:15:31.240 回答
0

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

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

于 2013-05-16T16:12:03.720 回答