Version control 源代码管理-锁定还是合并?

Version control 源代码管理-锁定还是合并?,version-control,Version Control,许多使用VisualStudio的程序员很难适应这样一个事实,即在其他源代码管理系统中,文件在任何给定时间都不需要锁定/签出给某个开发人员 合并的支持者说,允许两个人在同一个文件上工作可以提高工作效率,因为它消除了对同一个源文件的排队。它还避免了代码需要编写,但源代码被签出给刚刚休假两周的人的情况 锁定倡导者说,当多人同时处理同一个文件时,会带来很多风险。他们认为,在使用合并模型时,团队成员之间的沟通和协调变得更加必要。此外,许多人似乎不信任自动合并 您使用一种方法而不是另一种方法的最有说服力的

许多使用VisualStudio的程序员很难适应这样一个事实,即在其他源代码管理系统中,文件在任何给定时间都不需要锁定/签出给某个开发人员

合并的支持者说,允许两个人在同一个文件上工作可以提高工作效率,因为它消除了对同一个源文件的排队。它还避免了代码需要编写,但源代码被签出给刚刚休假两周的人的情况

锁定倡导者说,当多人同时处理同一个文件时,会带来很多风险。他们认为,在使用合并模型时,团队成员之间的沟通和协调变得更加必要。此外,许多人似乎不信任自动合并


您使用一种方法而不是另一种方法的最有说服力的原因是什么?

锁定文件可能无法很好地扩展到更大的团队。对于使用大量分支和合并的版本控制系统,让任何一个人对存储库进行这样的控制可能并不实际(因此,不能扩展到更大的团队)

例如,对于Subversion,分支是指针副本,因此如果您正在试验某个东西,但希望提交,则可以轻松创建TRY分支以避免损坏主干


对于像Git这样的分布式版本控制系统,每个签出本质上都是一个分支。

从锁定模型切换到合并模型后,我将进行以下观察:

  • 大多数合并用户倾向于与他们正在开发的分支的“头”版本保持相当接近。这通常意味着戏剧性的合并问题并不常见
  • 在使用合并模型10年左右的时间里,我只遇到过几个非常糟糕的合并问题。在这两种情况下,这是因为两个人解决了相同的问题
  • 我们通常在不与另一方沟通的情况下解决合并问题;)
  • 如果系统处于稳定的维护阶段且变化不大,“锁定”模式VC是可以的
  • 如果你的团队规模较小(我想是1-2人),锁型VC就可以了

IMHO合并模型是非常优越的,因为它允许我自由地处理代码。它可能不是一周内代码“变暗”的最佳模式,但对于“锁定”模式,这也是一个同样大的问题。一个星期内,任何人都不应该对代码发黑。

合并很好。在同一个文件上工作的程序员无论如何都应该进行通信。如果他们不通信,代码中就有更严重的问题

合并是做事情的自然方式,它带来了纪律,节省了时间(想象两个程序员最终重构了相同的代码)


锁是被动的…合并是主动的…

我认为合并模型优越得多,它更灵活,用户可以并行工作,从不等待彼此,解决冲突所需的时间远远少于锁定模型所损失的时间。大多数情况下,对文件所做的更改不会发生冲突,可以自动合并

这可能就是为什么它是大多数现代源代码管理系统的默认模型


但最终,关键因素始终是用户沟通。当用户沟通不畅时,冲突肯定会增加

对锁定VCSE的常见抱怨是,当有人去度假或会议时,某些文件被锁定,您会遇到问题:)

合并是正确的方法,但要补充前面的答案,它应该遵守一些标准才能有效

  • 分支定义良好(它并不代表“过于广泛”的开发工作,开发人员将不得不修改所有文件,从而增加对一个公共文件进行多次并发修改的可能性,并可能产生冲突)
  • 当一名开发人员开始修改另一名同事已保留的文件时,会发出通知(该文件已被更改)
  • 公共配置文件(每个开发人员都需要遵循一组预定义的值,除了需要为每个程序员重新定义的一个自定义本地路径)不是由任何人“保留”的,而只是在他们的私有工作区中修改
此外,请记住,也有可能将两者结合起来:

  • “锁定”:第一个修改文件的开发人员将是第一个提交文件的开发人员。其他开发人员也可以修改同一个文件,但在开始合并他们自己的修改之前,必须等待第一个文件提交
  • “合并”:当开发人员提交一个同事已经更改的文件时,他会合并他的更改

在这种情况下,您应该确保存在一个“发布”机制,以避免被第一个开发人员阻止。

如果有这样一种情况,那么锁定倡导者是错误的。我见过的每一个使用老式锁定式系统的团队都对此表示不满,并渴望看到使用其他方法的人。我在一个地方的一个项目中工作,该项目被迫使用锁定系统,并选择不使用任何控制(因此我建立了一个秘密的SVN分支,尽管我更喜欢Bzr或Git)


因此,我怀疑唯一的“锁定倡导者”是锁定系统营销部门的员工。

我自己也非常害怕合并的想法,回忆起nighmares在80年代试图合并代码的情景。然而,我下载了Subversion和Git,并与它们玩了一会儿,对它们的承诺印象深刻。真遗憾,我是这里唯一一个这么做的人

我做了一件你可以尝试的事情:跟踪自己。由于锁定模型更为悲观,因此如果您在该模型下工作,则很容易做到这一点。每次您与其他开发人员发生锁冲突时,都要过去与他们交谈。保持跟踪