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

Avoid accidental overwrite between different developers upon checkin or merge

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

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

有很多额外的指导可用 through the ALM RAngers' guides。我强烈建议您和您的开发人员阅读这篇文章。

注:

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

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

您可以做的一些事情:

确保开发人员沟通

进行每日 scrum(stand-up 会议)或能够使用 TFS 中的团队会议室的团队可以发出意图并让其他人了解他们正在做的事情的最新信息pro-actively。确保有可用的专用通信渠道,并且用户有 Team Rooms extension installed 以防他们没有 co-located。沟通可以防止许多此类问题,一旦发生此类合并问题,沟通是最佳解决方案。

让开发人员经常执行 get-latest 和 check-in

虽然没有针对此的服务器设置,但让您的开发人员接受有关分支、合并和一般源代码控制模式的培训会有很大帮助。如果用户定期检查传入的更改(获取最新的)并在他对自己的代码相对有信心时立即签入(比如在使用 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 to check out a file, they can signal other users that the file is undergoing major changes. This feature requires that all users have their workspace type set to "Server Workspace". Local workspaces, given their disconnected nature, ignore the Lock flag. Though individual users can always override their workspace type, it is possible to set the 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 中工作时会引入很多令人沮丧的事情(最重要的是,在添加任何文件时,必须获取项目文件的锁)。与 Exclusive Checkout 一样,这要求所有用户都使用服务器工作区。

由于此功能将防止任何文件被多人签出,因此它经常试图施加很大的力量来解决这个问题。只有在您的开发人员频繁出错的情况下,您才可以在他们接受培训时暂时启用此功能。