【问题标题】:How to implement "Lock & Edit" mechanism for Visual Studio? GitHub, SVN, VSS, TFS?如何为 Visual Studio 实现“锁定和编辑”机制? GitHub、SVN、VSS、TFS?
【发布时间】:2013-06-12 00:52:03
【问题描述】:

这是要求:

  1. C# 类需要在一组 5 名开发人员之间共享。
  2. 如果一个开发者开始编辑一个类,它应该被其他人自动锁定
  3. 只有当当前开发者发布该类时,其他人才能编辑该类

我了解 Git 是一个分布式版本控制系统,可以创建完整的本地存储库。必须使用合并功能来创建合并文件。

我也尝试过 Svn,但即便如此也使用了 Merge 工具。

我有一个小团队,我不想使用合并工具。实现这一点的最佳方法是什么?

【问题讨论】:

  • 为什么你会为 VCS 选择悲观锁定?
  • 一种方法是连续工作。当开发人员开始一项任务时,所有其他人都会停止工作,直到他完成......
  • 拥抱合并。它有效。
  • 根据您的要求,Git 是您想要的最远的东西。我仍然会推荐它。恕我直言,Git 是最擅长合并的版本控制工具,这使得它最容易做到。这是使用 Git 的一个很好的理由。
  • 如果您必须“专门用于合并资源”,那么您就做错了。您要求做的事情与过去十年来管理源代码的方式(无论如何都要做好)几乎完全相反。

标签: visual-studio-2010 git svn tfs visual-sourcesafe


【解决方案1】:

SVN 确实通过其锁定功能支持这种工作流程。

阅读locking in the SVN Book v 1.7 上的部分 - 它包含大量细节。

据我所知git does not support a locking workflow

显然 Team Foundation Server 也支持锁定工作流,但我不熟悉它。

我要补充一点,我不认为这是一种很好的工作方式,除非你绝对必须这样做(例如二进制文件或难以合并的文件,如模型 xml)。定期的团队沟通和防御性编程应该意味着绝大多数代码合并将由您的版本控制系统自动处理。

合并只是协作开发的一部分。没有人真正想要使用合并工具,但 IMO 不得不偶尔(有时是混乱的)合并是一个更好的前景,而必须等到其他人完成文件才能进行更改- 很可能不会与其他更改发生冲突的更改。尤其是在一个小团队中。

您也不应该(如上面的 cmets 所述)需要专用于合并的资源。合并最好由两个人完成。

  1. 有冲突的开发者,以及
  2. 提交最后一次更改(导致该冲突)的开发人员。

如果这两个不能很快解决,或者您确实需要一个仅用于合并的资源(我已经看到即使在大约 10 名开发人员的小型团队中也会发生这种情况),您就会遇到问题......例如;

  1. 代码是单体/高度耦合的,需要重构
  2. 开发人员未提交原子更改。
  3. 使用 svn 和复杂的分支策略(可怕)
  4. 开发者之间不互相交谈(每天只需 10 分钟的站立会有所帮助)

祝你好运!

【讨论】:

  • +1 我还要补充一点,TFS 的行为方式大致相同,您可以将团队项目配置为使用悲观锁定,但不建议这样做。 TFS 2012 中的合并工具非常好,如果它们不够用,您可以插入您选择的合并工具
  • 谢谢詹姆斯,我自己没有使用过 TFS,所以有一些很好的额外信息。
  • @mounds - 感谢您的详细回复。您和其他专业人士已经说服我拥抱合并!虽然我还在权衡TFS!再次感谢
  • 很高兴听到 - 因为你不需要锁定,我建议使用 git 或 hg。
【解决方案2】:

Apache Subversion 1.8 具有重大改进,使合并和解决冲突更容易。新的automatic merges 绝对值得一试!

正如@mounds 已经提到的,您可以在 Apache Subversion 中使用悲观锁定类型的工作流。请参阅SVNBook | Lock communication section。在这种情况下,带有 VisualSVN 的 Visual Studio 会在您开始修改文件之前提示您锁定文件。

请注意,这种方法应该用于那些无法合并的文件。所以~,拥抱合并!

鼓励用户和管理员都将 svn:needs-lock 属性到任何不能上下文关联的文件 合并。这是鼓励良好锁定的主要技术 习惯和防止浪费精力。

【讨论】:

  • 感谢您的回复。由于细节和清晰度,我选择@mounds 作为最佳答案。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 2013-11-19
相关资源
最近更新 更多