Version control 为什么要避免版本控制系统中的悲观锁定?

Version control 为什么要避免版本控制系统中的悲观锁定?,version-control,locking,Version Control,Locking,根据我读到的一些关于版本控制的帖子,人们似乎认为版本控制系统中的悲观锁定是一件坏事。为什么?我知道这会阻止一个开发人员在另一个开发人员签出文件时提交更改,但那又怎样呢?如果您的代码文件太大,以至于经常有多个人同时处理它们,我建议您重新组织代码。将其分解为更小的功能单元 即使使用良好的版本控制系统提供的工具,并发代码更改的集成也是一个乏味且容易出错的过程。我认为如果可能的话应该避免。那么,为什么不鼓励悲观锁定呢?软件开发人员总是乐观主义者——看看他们的评估技能就知道了 在实践中,我们发现冲突很少,

根据我读到的一些关于版本控制的帖子,人们似乎认为版本控制系统中的悲观锁定是一件坏事。为什么?我知道这会阻止一个开发人员在另一个开发人员签出文件时提交更改,但那又怎样呢?如果您的代码文件太大,以至于经常有多个人同时处理它们,我建议您重新组织代码。将其分解为更小的功能单元


即使使用良好的版本控制系统提供的工具,并发代码更改的集成也是一个乏味且容易出错的过程。我认为如果可能的话应该避免。那么,为什么不鼓励悲观锁定呢?

软件开发人员总是乐观主义者——看看他们的评估技能就知道了

在实践中,我们发现冲突很少,不必担心锁定的好处超过了偶尔的冲突解决步骤

  • 与Source Safe一起玩,让开发人员休假两周。此外,VSS管理员不在身边。现在你有一个补丁要发布,但你不能,因为开发者
  • 如果您有多个功能和/或正在修复的bug。无论您的代码有多小,您仍然需要争夺一个中心文件
  • 悲观锁定是(个人经验)合作的方式。有时很容易被良好的团队沟通所取代。只要说“嘿,我要处理这几个文件一段时间”

    我在2到6人的团队中工作过,没有锁定,除了一些常见和必要的合并之外,我们从来没有遇到过问题

    我还曾在托管项目中锁定过一次。这会适得其反。

    • 你并不总是可以选择 将文件分开
      • 配置文件
      • XML文件
    • 即使相对较小的文件也可以包含多个开发人员需要访问的不同部分
      • 图书馆
      • 公用事业
    • 合并工具比以往任何时候都更加智能
      • 冲突相当罕见
    • 减少由于开发人员“意外”签出文件而导致的延迟

    如果开发人员无法处理合并和修复冲突,则应重新教育他


    即使是很小的文件也会发生冲突,例如与JSP冲突,一个人(web开发人员)可能会更改布局代码,其他人可能会更改JSP使用的模型的API。

    这通常取决于您的项目和团队。悲观锁定很好,因为它很容易理解-一次一个开发人员,不需要合并

    然而,它的缺点恰恰是——一次开发一个开发人员。我现在的情况是,一位同事去了现场,在他离开之前,他检查了所有的东西,这样如果他必须修复任何错误,他就可以回来检查他在……中的所有更改。。。。对他来说很好,对我和基地的其他开发团队来说很糟糕

    如果你能在你的团队中绕过悲观锁定,那么使用它就可以了,事实上,人们讨厌它的最大原因是因为它的visualsourcesafe默认做法。如果您对合并大量更改没有信心,那么您还有另一个使用它的理由-如果您曾经使用过乐观锁定SCM,并完成了合并,您将知道恢复有多困难

    如果你能处理合并,那么乐观锁定就更好了,我建议你使用它,但如果你不想使用它,你不必交上你的极客卡

  • Bob需要编辑FooBar.java
  • 约翰把它签出来编辑了
  • Bob仍然编辑他的本地副本,并将其保存为FooBar.java.bak
  • 当约翰办理登机手续时,鲍勃办理登机手续
  • Bob在其上复制FooBar.java.bak并将其签入
  • 约翰开始重新实现他的功能
  • 我一次又一次地看到这种情况发生。开发人员这样做是因为这个过程很烦人:

  • Bob需要编辑FooBar.java
  • 约翰把它签出来编辑了
  • 鲍勃得等约翰做完了再摆弄他的大拇指
  • 悲观锁定感觉像业余时间,抱歉

    如果您的代码文件太大,以至于经常有多个人同时处理它们

    如果是这种情况,“人类”应该负责并协调任何变化。在理想的情况下,如果您的项目管理很好,您很少会遇到试图更改锁定文件的情况,因为有人会协调工作,所以这实际上不会发生

    换句话说,您将知道“Bob”正在对组件X/Y/Z进行大量更改,如果您在组件X中有错误修复,您将知道在尝试提交更改之前与Bob交谈


    正如我所说,这是理想的;)

    如果可能发生严重冲突,悲观锁定是个好主意。对于大多数编程来说,您不会看到任何严重的冲突,因此悲观锁定是毫无意义的。以下情况除外:

    • 处理无法真正合并的二进制文件——艺术资源(模型、纹理等)就是一个很好的例子
    • 与不知道如何合并、不想学习的非技术用户合作(大多数是艺术家,但一些技术作家也会对此大发雷霆)
    • 处理非常大的文件,由于其高度的复杂性,这些文件不容易合并或分解为较小的文件(从未见过这样的情况,但我相信这是可能的)

    否则…

    关于Bob和John的案例,像svn这样的合作系统不会像锁定系统那样阻止这种情况。我可以“更新”FooBar.java,这使svn确信我有最新版本,然后在本地删除该文件并用我自己的个人密码覆盖它