Svn 如何避免Subversion中的复杂合并?

Svn 如何避免Subversion中的复杂合并?,svn,version-control,tortoisesvn,ankhsvn,Svn,Version Control,Tortoisesvn,Ankhsvn,我是来自视觉源代码安全(VSS)背景的Subversion(SVN)新手。在VSS中,编辑文件的人会签出该文件,并锁定其他用户,使其无法通过Visual Studio编辑该文件。我知道SVN是一个并发模型,允许多人处理同一个文件,然后将更改合并在一起。我的问题是: 避免用户编辑同一个文件(编写大量代码)并面临复杂的更改合并,或者更糟糕的是,编写大量代码却发现文件被其他用户锁定的最佳方法是什么 在检索文件时,是否有方法通知用户该文件当前正被其他用户编辑或锁定 其他详情: 使用VisualSVN服务

我是来自视觉源代码安全(VSS)背景的Subversion(SVN)新手。在VSS中,编辑文件的人会签出该文件,并锁定其他用户,使其无法通过Visual Studio编辑该文件。我知道SVN是一个并发模型,允许多人处理同一个文件,然后将更改合并在一起。我的问题是:

  • 避免用户编辑同一个文件(编写大量代码)并面临复杂的更改合并,或者更糟糕的是,编写大量代码却发现文件被其他用户锁定的最佳方法是什么

  • 在检索文件时,是否有方法通知用户该文件当前正被其他用户编辑或锁定

  • 其他详情:

    使用VisualSVN服务器作为SVN服务器。

    使用TortoiseSVN和AnkhSVN客户端。

    我会花一些时间学习“签到舞”

    这是一张照片


    网络上也有多篇关于这一点以及如何减轻痛苦的文章。

    我建议采取不同的方法来使用subversion

    • 你应该经常得到更新
    • 你也应该尽早和经常登记

    使用这种方法,合并通常很少发生,而且是自动进行的。在冲突的情况下,这些冲突通常较小。

    首先,如果可能的话,避免在不签入文件的情况下编写“大量代码”可能是明智的。如果您有一个好的单元测试套件(如果没有,为什么没有?:),那么只要您在绿色栏上签入,频繁提交是最好的

    然后,如果您确实有需要花费很长时间的更改,那么值得定期执行
    svn更新
    ,以尽可能与主干保持同步。Subversion在合并方面(与VSS相比)是相当值得尊敬的,并且能够很好地处理大部分内容


    任何它无法处理的事情,都将进入冲突状态,让您使用自己选择的合并工具解决冲突(我建议使用ace)。

    这不是问题。使用乌龟SVN,这样做

  • 在Windows资源管理器中,右键单击 档案
  • 选择“乌龟SVN”,然后选择“获取” 锁……”
  • 在“锁定文件”对话框中,填写 在你锁的理由里
  • 单击“确定”
  • SVN是一种并发模型,允许多人处理同一文件,然后将更改合并在一起

    我认为更多的是在同一个项目上工作,该项目由一堆或多或少的独立文件组成。处理同一个文件并合并结果当然是可能的,而且偶尔也会发生,但这绝对不是默认/理想的操作模式。因此:

    • 经常更新
    • 经常犯错误
    • 避免使用大型类/文件(1000行太多)。这还有其他好处:-)

    我在以前的地方遇到了几个问题,我们从基于锁的系统转到了SVN

    尝试在SVN中复制锁-编辑-解锁行为并不是一个好主意,因为它的设计方式不需要这样做。SVN使用的合并算法非常好,我只遇到过少数需要在合并过程中手动干预的情况。令人惊讶的是,在同一个文件上工作的两个人实际上接触同一行的情况非常罕见,而后者往往是唯一需要手动干预的时间

    SVN真正设计用于经常从主干或当前分支进行更新的环境中。如果您必须执行长期工作或更改文件中大量代码的工作,那么最好使用分支来执行该工作并将其重新合并。是的,你将不得不不时地经历一些合并的痛苦,但是比起一个没有设计成那样工作的系统,这要少得多


    如果您试图使用SVN而不是作为“本机SVN”,而是作为具有不同名称的VSS,那么这将是一件痛苦的事情,也不值得为此烦恼。熟悉新的范例,您会惊讶地发现,与旧的“在任何给定时间只有一个用户编辑给定文件”例程相比,采用这种方式工作会好得多。

    我也是以前的视觉资源安全用户。合并曾经让我发疯,直到我意识到这不是技术问题,而是人的问题。在使用VSS时,大多数开发人员都会在签入代码之前尽可能多地完成工作。这种行为是导致复杂合并的原因

    以下是一些可以缓解这种情况的措施:

    • 开始之前,请始终更新工作副本
    • 经常登记入住。这将使代码更改更小,更容易自动合并
    • 不要让工作代码处于未选中状态
    • 如果更改需要几天或更长时间,开发人员应该创建自己的分支
    这些事情帮了我很大的忙,尤其是当我所在的团队越来越大的时候。从VSS复制锁行为是一个非常糟糕的主意,并且会导致更多问题。接受新的工作流程

    如果您仍然想使用工具,那么我建议您查看。

    简短回答:

  • 经常更新。尽早登记,经常登记。如果你工作的时间更长(超过一天或两天),考虑创建一个特征分支。<李>
  • 没有
  • 稍长一点的回答:

    如果不止一个开发人员在同一个文件上做了“大量的更改”,那么您的开发人员的工作方式或功能在不同文件中的分布方式都是可疑的。我一直在不同规模的团队中使用CVS和SVN,很少有合并成为真正问题的情况。(这些通常是基本服务的更改,如字符串、日志记录、e