Visual Studio 2015高级编程(第6版)
上QQ阅读APP看书,第一时间看更新

13.1 源控制

软件应用程序的构建有很多不同的方式。尽管有关团队结构、工作分配、设计和测试的理论不尽相同,但有一点是大家都认同的—— 应用程序的全部源代码应存储在单个存储库中。源控制指存储源代码(称为“签入”)和访问编辑源代码(称为“签出”)的过程。这里提到的源代码包括构建和部署应用程序所需的全部资源、配置文件、代码文件和文档。

不同源代码存储库的结构和接口也不一样。基本的存储库仅提供了有限的接口,只能实现文件的签入和签出。其存储机制通常是简单的文件共享,因此无法保存任何历史记录。这种存储库有自身的优势,它允许同一个项目的所有开发人员访问相同的文件,而不存在覆盖和丢失变更的风险。较复杂的存储库不仅为签入、签出提供了一个富界面,也帮助完成文件合并和冲突解决的工作。它们还可以用于在Visual Studio内部管理源代码。源控制存储库的其他功能还包括文件的版本管理、分支管理以及远程访问。

很多公司开始使用源控制存储库,为同一个项目的参与人员共享源代码提供了机制。开发人员不再需要在网络的某个共享文件夹上手动复制源代码,而可以查询存储库来获得最新版本的源代码。开发人员结束自己的工作后,可以方便地把所有更改都签入存储库。这就确保了团队中的每个成员都可以访问代码的最新版本。当然,把所有的源代码签入同一个存储库,也便于定期备份数据。

使用源控制存储库的一个最大优势是版本跟踪,包括修改内容和修改者等全部历史信息。尽管大多数开发人员都认为自己编写的代码完美无瑕,但事实上,一个修改常常会破坏原有的规则。检查项目的修改历史,可以标识哪次修改引起了缺陷。对项目变更的跟踪还可以用于报表制作和检查,因为它记录了每一次修改的时间和人员。

13.1.1 选择源控制存储库

Visual Studio 2015并没有提供源控制存储库,但给文件的签入、签出以及更改的合并和检查提供了丰富的支持。为在Visual Studio 2015中使用存储库,必须指定要使用的存储库。Visual Studio 2015支持与Team Foundation Server(TFS)和Git的深度集成,TFS是Microsoft的主要源控制和项目跟踪系统,Git是一个顶尖开源控制系统。另外,Visual Studio还支持使用Source Code Control (SCC)API的所有源控制客户端。使用SCC API的产品有Microsoft Visual SourceSafe和开放源代码的免费源控制存储库Subversion和CVS。

为了使Visual Studio 2015更易于操作和使用特定的源控制提供程序,必须在Tools菜单的Options选项中配置源控制提供程序的信息。图13-1所示的Options窗口选中了Source Control选项卡。

图13-1

界面中一开始只显示很少的源控制设置。但是,一旦选择了提供程序,树中就会添加其他节点,这些节点可以控制源控制的行为。这些选项专用于选中的源控制提供程序。

第57章讨论Team Foundation的使用,Team Foundation是一种集成更丰富、功能更全面的源控制存储库。因此,本章剩余部分主要讨论Git的使用,Git是一个开源的源控制存储库,它可以与Visual Studio 2015集成。

Environment设置

一旦从插件菜单中选中源控制存储库后,就必须为计算机配置该存储库。许多源控制存储库都需要进行一些额外设置才可以与Visual Studio 2015集成。这些设置位于作为Settings窗体一部分的额外窗格中。然而,这些值是特定于插件的,因此无法概括性地描述详细信息。简单来说,该插件可以提供进行适当配置所需的信息。更重要的是,与Git集成并不需要提供额外的设置。

13.1.2 访问源控制

本节将详细介绍如何在Git存储库中添加解决方案,该方法也适用于其他所选择的源控制存储库。这个过程可以应用于尚未在源控制存储库中添加的所有新解决方案或已有的解决方案。这里还假设有权访问Git存储库,并在Visual Studio 2015中将其选择为源控制存储库。

1.添加解决方案

为将解决方案添加到源控制中,可以定位到File菜单,选择Add to Source命令,这会打开Choose Source Control对话框,如图13-2所示。或者,如果新建一个解决方案,则选中New Project对话框中的Add to Source Control复选框,从而立即将新解决方案添加到源控制存储库中。

图13-2

添加解决方案之后,可以通过Team Explorer选项与源控制存储库交互。有许多选项,如图13-3的默认视图所示。

图13-3

Source Code Control(SCC)API假定.sln解决方案文件位于项目文件所在的文件夹或父文件夹中。如果把.sln解决方案文件放在不同于项目文件的另一个文件夹层次结构中,就会出现“有趣”的源控制维护问题。

2.Solution Explorer窗口

在源控制中添加解决方案后,第一个变化是Visual Studio 2015调整了Solution Explorer中的图标以反映源控制状态。图13-4展示了3种文件状态。当最初在源控制存储库中添加解决方案时,每个文件的文件类型图标旁边都会出现一个小的选中标记图标。

这表示文件已经签入,并且还没有被任何人签出。例如,Order.cs和Properties就有这种图标。

图13-4

一旦解决方案位于源控制之下,所有的更改都会被记录,这包括文件的添加和删除。图13-4展示了在解决方案中添加Product.cs的情况。Product.cs旁边的加号表明这是一个新文件。CSClassLibrary项目旁边的红色复选标记表示该文件自上一次签入以来已经被编辑过。

3.挂起更改

在大型应用程序中,通常很难一眼看出哪些文件已修改,或者项目中最近添加或删除了哪些文件。Changes窗口如图13-5所示,可用于观察哪些文件在等待签入存储库。在文件级别,更改可以签入或签出存储库。在窗口的底部,列出了Git当前没有跟踪的文件。这些文件通常添加为当前开发工作的一部分。把它们从Untracked Files部分拖动Included Changes到部分,可将它们移到已包含文件的列表中。

图13-5

要重新签入一个文件,应在窗口顶部填充Commit注释,然后选择Commit按钮,这会把文件签入本地存储库中。单击Commit按钮右边的下拉框,就可以签入并推动(把存储库推入一个远程存储库)或签入并同步(从远程存储库中拉出存储库,再推入同一个远程存储库)。

4. 合并更改

有时,多个开发人员会更改同一个文件。某些情况下,如果这些更改不相关,就可以自动处理,例如为已有的类添加方法。但是,如果更改文件的同一个部分,就必须有一个协调更改的过程以获得正确的代码。此时,使用Resolve Conflicts屏幕识别并解决冲突,如图13-6所示。

图13-6

其中列出了有冲突的文件。为了解决某个文件的冲突,可以双击它,显示额外的选项,如图13-7所示。

图13-7

这里,有很多用于解决冲突的选项。可以提取远程版本或保存本地版本。也可以点击Compare Files链接,显示两个文件的差异,如图13-8所示。

图13-8

一旦解决了冲突,文件就移动到窗口底部的Resolved列表。

5. 历史记录

在Git存储库中更新文件后,系统会为该文件的每一个版本创建历史记录。在Solution Explorer的右击快捷菜单中选择View History选项,可以浏览历史记录。图13-9显示了一个文件的简要历史记录。该对话框允许开发人员查看以往的版本(可以看到当前文件有两个以前的版本),浏览每个版本的相关注释。该对话框中提供的功能取决于所使用的源控制插件。对于Git,在该对话框中可以使用上述功能。然而,如果利用Team Foundation Server作为源控制插件,则该窗体上的工具栏项和上下文菜单选项将允许获得特定的版本、标记某个文件为已签出、比较文件的不同版本、将文件回滚到以前的某个版本(会擦除新增的版本),以及汇报版本的历史。

图13-9