避免在签入或合并时不同开发人员之间的意外覆盖

Posted

技术标签:

【中文标题】避免在签入或合并时不同开发人员之间的意外覆盖【英文标题】:Avoid accidental overwrite between different developers upon checkin or merge 【发布时间】:2015-05-15 17:33:23 【问题描述】:

不同的开发人员签入涉及同一文件的代码,或者不同的分支可能会被合并。我是管理员方面的 TFS 新手,但我知道如何对代码进行基本的签入。如何避免管理员端的代码冲突?我们使用 Microsoft Team Foundation 服务器作为版本控制。

【问题讨论】:

【参考方案1】:

版本控制系统允许不同的用户编辑相同的文件,以便在合并时提供合理的合并体验。多个开发人员签出同一个文件的能力是让团队变得高效的原因之一。当开发或维护同一产品的多个版本时,不可能完全防止冲突。

through the ALM RAngers' guides 有很多额外的指导。我强烈建议您和您的开发人员阅读此内容。

注意:

Visual Studio 2013 提供比旧版本更好的合并体验。像Semantic Merge 这样的第三方工具通过解析正在合并的代码并应用一些额外的智能逻辑来防止冲突,进一步改善了体验。

对于某些众所周知的难以合并的文件,例如 SSIS 包,还有其他专业工具,例如 BIDS Helper Smart Diff。

你可以做一些事情:

确保开发人员沟通

进行每日例会(站立会议)或能够在 TFS 中使用 Team Room 的团队可以发出意向信号,并让其他人主动了解他们正在做的事情。确保有可用的专用通信渠道,并且用户拥有Team Rooms extension installed,以防他们不在同一地点。沟通可以防止许多此类问题,并且是一旦发生此类合并问题的最佳解决方案。

让开发人员经常执行获取最新信息和签到

虽然没有为此设置服务器,但让您的开发人员接受关于分支、合并和通用源代码控制模式的培训会大有帮助。如果用户定期检查传入的更改(获取最新的)并在他对自己的代码相对有信心时立即签入(例如在使用 TDD 时第一次测试通过之后),那么发生冲突的可能性就会大大降低。

即将到来的变化镜头

Codelens has been updated with a new Lens as one of the updates that was released after RTM。镜头要求客户端和服务器都至少升级到 Update 2 和 Visual Studio 2013 Ultimate Update 2。建议您在开始应用更新时始终保持最新状态,因此我建议您安装更新4.

虽然 Code Lens 是一项 Ultimate 功能,但随着 Visual Studio 2015 的发布,它将转移到 Professional 中。

使用独家结帐

如果用户使用Checkout and lock option 签出文件,他们可以通知其他用户该文件正在发生重大更改。此功能要求所有用户的工作空间类型都设置为“服务器工作空间”。鉴于本地工作空间的断开性质,忽略 Lock 标志。尽管单个用户始终可以覆盖其工作区类型,但可以设置 default workspace type at the collection level。

禁用单个文件类型的合并和多次签出

更好的解决方案是标记难以合并的文件类型,带有大量 XML 和 GUID 的旧式 SSIS 包是一个很好的选择。 Open the Source Control settings and add the extensions of "bad files". 无论工作区设置如何,此设置都部分适用于 Visual Studio(Visual Studio 将仅提供 Take LocalTake Server 并且不会提供合并。

禁用多次结帐

可以设置项目的源代码控制选项not allow "Multiple Checkouts",这将在文件签出时自动获得锁定。不建议打开此功能,因为它在 Visual Studio 中工作时引入了很多令人沮丧的事情(最重要的是,在添加任何文件时,必须获得项目文件的锁定)。与独占结帐一样,这要求所有用户都使用服务器工作区。

由于此功能将防止任何文件被多人签出,因此它通常会尝试使用多种方式来解决此问题。只有在您的开发人员频繁搞砸的情况下,您才可以在他们接受培训时暂时启用此功能。

【讨论】:

谢谢你这么棒的回答。

以上是关于避免在签入或合并时不同开发人员之间的意外覆盖的主要内容,如果未能解决你的问题,请参考以下文章

如何在所有开发者之间共享 FxCop 规则?

如何检索分支上元素的结帐评论?

Mercurial更新没有要求合并和覆盖工作目录

敏捷开发的26条至理名言

禁用本地构建的代码分析

Visual Studio 2015 在签入后不会立即删除挂起的更改(TFS 2015)