源代码管理简介

更新:2007 年 11 月

Visual Studio 在其集成开发环境 (IDE) 中使用 Visual Studio 集成协议 (VSIP) 层支持源代码管理。VSIP 可以承载各种源代码管理包,通常以写入适当协议的插件实现。源代码管理插件的一个例子是 Visual SourceSafe 支持的 SourceSafe LAN 插件。有关此插件的详细信息,请参见 Visual SourceSafe 帮助。

说明:

Visual Studio 将源代码管理包作为插件引用,尽管它们可以被实现为其他类型的软件模块。

Visual Studio 源代码管理只是一个第三方源代码管理插件的环境。因此它的功能只有通过插件的安装才能被激活。要使用第三方的源代码管理插件,通常必须在您站点的客户端和服务器计算机上安装第三方应用程序和/或源代码管理插件。一旦它们按照第三方说明的指示进行了安装,它们的功能将可通过 Visual Studio 使用。启用的操作根据源代码管理插件的不同而不同。您必须阅读第三方的文档查看包特定的有关操作的详细信息。

有关 Visual Studio 中源代码管理设计的详细信息,请参见 Visual Studio 帮助中的“Overview (Source Control)”(概述(源代码管理))。本节帮助也提供了您开发一个与 Visual Studio 兼容的第三方源代码管理包所需要的所有信息。

Visual Studio 中源代码管理支持基础

Visual Studio 中基本的源代码管理支持包括源代码管理插件和环境选项的设置、插件切换、数据库访问和 Visual Studio 项目、解决方案和文件以及相关的元数据的版本控制和操作。Visual Studio 中的源代码管理也增强了数据库访问控制的协议,例如锁定-修改-解锁工作风格,希望更改文件的用户必须以独占方式将其签出。

记住您应该使用 Visual Studio 机制中的源代码管理与源代码管理插件交互是非常重要的。请不要使用第三方提供的包装插件的其他客户端应用程序,例如 Visual SourceSafe 资源管理器。Visual Studio 中源代码管理机制的正确使用确保只有正确的文件被添加到源代码管理中以及您的 Visual Studio 项目和解决方案文件使用正确的插件特定的详细信息更新。

源代码管理插件配置和切换

Visual Studio 源代码管理通过“选项”对话框中的“源代码管理”项支持配置和插件切换。此项可以通过选择 Visual Studio 的“工具”菜单上的“选项”访问。您将使用“选项”对话框选择您希望用作源代码管理的插件,并为该插件设置环境选项。

在您和您的工作组可以利用 Visual Studio IDE 中的源代码管理功能之前,您必须:

  • 确定是否有可用的源代码管理插件。

  • 如果您希望使用的源代码管理插件没有安装在您的计算机上,请安装支持插件的第三方产品并且重新启动 Visual Studio 以注册它。

  • 根据特定插件的功能创建一个源代码管理数据库。

  • 给所有的工作组成员发送一个指向数据库位置的链接。

数据库访问

基本的数据库访问命令,例如“签出”和“添加到源代码管理”,可以在 Visual Studio 的“文件”菜单上找到。可是,这些命令只有在您选择了希望使用的源代码管理插件后才被激活。当您使用这些数据库访问命令之一时,您已选择的插件调用相应的第三方功能和/或环境以完成相关的操作。

一些访问操作只要选择了插件就是有效的,而另外的操作只有当您在 Visual Studio 的解决方案资源管理器中也选择了一个 Visual Studio 项目、解决方案或者文件时才可用。例如,一旦您选择了一个插件就可以使用“添加到源代码管理”命令。但是,要使用“签入”命令,您必须在解决方案资源管理器中有一个选定的项。

源代码管理的文件处理

您可以添加以下文件到 Visual Studio 源代码管理:

  • 解决方案文件 (*.sln)。

  • 项目文件,例如 *.csproj、*.vbproj 文件。

  • 基于 XML 的应用程序配置文件,用来控制 Visual Studio 项目的运行时行为。

您不能添加到源代码管理的文件包括如下:

  • 解决方案用户选项文件 (*.suo)。

  • 项目用户选项文件,例如 *.csproj.user、*.vbproj.user 文件。

  • Web 信息文件,例如 *.csproj.webinfo、*.vbproj.webinfo,这些文件控制 Web 项目的虚拟根位置。

  • 生成输出文件,例如 *.dll 和 *.exe 文件。

命名空间更改传播

Visual Studio 源代码管理支持源代码管理插件的命名空间更改传播。更改传播适用于删除、重命名和移动操作。当您请求一个启用了更改传播的操作时,源代码管理插件在您签入该项和其他用户获取它时更改您受源代码管理项的工作副本、数据库中的主控副本和其他用户的副本。

源代码管理如何处理解决方案和项目

当您添加一个解决方案或者项目到源代码管理时,源代码管理插件首先必须做的事情是为要添加的项标识一个统一的根目录。这个根目录是一个到组成解决方案或者项目的所有工作文件夹和文件的上级目录的路径。

统一根目录一般映射到磁盘上的某个物理路径。但是,如果解决方案包含驻留在多于一个磁盘驱动器上的文件或者项目,统一根目录就没有可以映射的物理文件夹了。一个解决方案可以跨越驱动器,但是一个源代码管理的统一根目录不能跨越驱动器。为了支持这种情况,Visual Studio 源代码管理支持超级统一根目录的概念。这种类型的根是一个虚拟容器,受源代码管理的解决方案中所有的项目和文件都位于它的下面。

当您使用具有高级功能的源代码管理插件添加解决方案时,插件在数据库中创建一个空的解决方案根文件夹。此文件夹将包含受源代码管理的解决方案中所有的项。默认情况下,此文件夹为 <solutionname>.root。

说明:

当您添加一个单独的项目到源代码管理中时,将不会创建 .root 文件夹。

使用解决方案根目录会带来以下好处:

  • 更少地提示。解决方案根目录将一个解决方案中可能的源代码管理绑定的数目最小化,于是也将当您添加解决方案到源代码管理和执行其他任务时的用户提示最少化。

  • 项目封装。解决方案根目录确保解决方案中所有的项目能很容易地被识别为归属于相同的解决方案,即时当一个或者多个项目驻留在不同的分区或者计算机中时。

您可以禁用 <solutionname>.root 文件夹的创建,但是不推荐这样做。有关更多信息,请参见如何:禁止创建 <solutionname>.root 文件夹

Visual Studio 中的解决方案可能是格式良好的,也可能不是。格式良好的解决方案在磁盘上的层次结构和其在解决方案资源管理器中的层次结构相匹配。格式良好的解决方案中所有的项目都存储在磁盘上解决方案文件夹的子文件夹中。如果解决方案是格式良好的,那么当您将其添加到源代码管理中时,源代码管理插件在 *.root 文件夹下创建一个文件夹以包含该解决方案的解决方案文件 (*.sln) 和解决方案用户选项文件 (*.suo) 的主控副本。最后,源代码管理插件在源代码管理数据库中的 .sln 文件夹下为每个附加的项目创建一个文件夹。

如果一个解决方案不是格式良好的,那么源代码管理插件为解决方案和它的初始项目创建一个文件夹。然后每个附加项目的文件夹将与解决方案文件夹并行创建。

解决方案或者项目的视图

Visual Studio 为受源代码管理的解决方案或者项目提供了三种不同的视图:设计视图、源代码管理视图和物理视图。许多源代码管理任务在这些视图的独立元素之间有一对一的映射时更容易执行。但是,如果您在 Visual Studio 中使用默认设置创建解决方案和项目并将它们添加到源代码管理中,您的解决方案和项目将不需要在磁盘上按照和它们在解决方案资源管理器和数据库中相同的方式进行组织。

您在解决方案资源管理器中看到的解决方案或者项目的设计视图是解决方案或者项目内容的逻辑描述。通常设计视图是整齐而意义明确的。不必要的文件被隐藏,许多不同物理位置的文件被放入一个单一的项目容器。

您在独立应用程序(例如 Visual SourceSafe 资源管理器)中看到的解决方案或者项目的源代码管理视图也是解决方案或者项目的一种逻辑视图。但是,源代码管理视图不一定是逻辑视图的一个反射。

您在 Windows 文件资源管理器中看到的解决方案或者项目的物理视图并不反映逻辑视图或者源代码管理视图的层次结构。

以下指南可以帮助您对受源代码管理的解决方案或者项目的设计视图、物理视图和源代码管理视图之间的彼此关系获得系统的真实的了解:

  • 首先创建一个空的解决方案,然后向其中添加项目。这帮助您维护存储中解决方案和它的项目之间在逻辑上的父子关系。然后当您添加解决方案到源代码管理时,源代码管理视图和设计视图都将反映磁盘上的解决方案的层次结构。

  • 给每个解决方案一个唯一的、描述性的、与每个包含项目的名称都不同的名称。

  • 避免将链接文件添加到受源代码管理的解决方案或者项目中。

  • 如果可能,将解决方案或者项目中的所有文件存储在同一个磁盘驱动器上。

源代码管理连接和绑定

Visual Studio 将连接定义为一个 Visual Studio 和数据库服务器之间的实时数据连接。当您添加一个解决方案或者项目到源代码管理中时,源代码管理插件将该项和它所有的内容从磁盘复制到数据库。每个包含解决方案或者项目文件的文件夹创建一个源代码管理文件夹。在添加该项之后,源代码管理插件将您解决方案或者项目的本地工作副本绑定到其数据库中的版本上。

每个受源代码管理的解决方案至少有一个源代码管理绑定。但是,一个项可以有多个绑定,可能需要多个到数据库的连接。绑定和连接的数目取决于初始时您如何创建解决方案以及其项目和文件是否都保存在相同的分区。

作为绑定和连接的一个例子,可以将一个有多个项目、格式良好的受源代码管理的解决方案设想为一座有几个房间的房子。当您建造房子的时候,您可以安装一条从房间到街道的单一的高速数据线。您在防火墙后安装一个路由器以将流入的数据分发到其他房间,您向一个 Internet 服务提供商付费以将您的房子连接到 Internet 上。

您可以将源代码管理绑定看作表示为房子创建的单一的数据线。当您打开一个受源代码管理的解决方案的时候,连接通过绑定而建立。连接在您解决方案在磁盘上的工作副本和在数据库中的主控副本之间建立一次握手。

如果一个受源代码管理的解决方案不是格式良好的,那么您可以将它看作一座每个房间都直接连接到 Internet 的房子。Internet 费用比单一连接的房子要更高,维护费用更高,并且切换到另外一个 Internet 服务提供商将困难得多并且浪费时间。

理想的情况是,解决方案和它的项目共享单一的源代码管理绑定。单绑定的解决方案相比多绑定的解决方案更易管理。它们更易于:

  • 从源代码管理断开连接以脱机工作。

  • 在重新连接到网络后连接数据库。

  • 一步分支。

您可以通过创建空解决方案然后向其中添加项目的方式使用单绑定创建多项目的解决方案。您也可以通过在创建“解决方案-项目”对时在“新建项目”对话框中选择“创建解决方案的目录”选项完成此操作。

如果您在一个步骤中创建“解决方案-项目”对而没有在“新建项目”对话框中选择“创建解决方案的目录”选项(默认是关闭的),当您向解决方案中添加第二个工程时将创建第二个绑定。初始项目和解决方案会创建一个绑定。每个附加项目会创建附加的绑定。

源代码管理术语

Visual Studio 文档使用了很多术语描述源代码管理的功能和概念。下表定义了一些通用术语。

  • 基本版本
    一个文件的服务器版本,本地版本是从它派生出来的。

  • 绑定
    将解决方案或者项目在磁盘上的工作文件夹关联到其数据库中的文件夹的信息。

  • 分支
    在源代码管理下创建一个新版本、分支、共享文件或者项目的过程。一旦分支被创建,源代码管理下的两个版本在此前有共享的历史记录,此后则有各自的历史记录。

  • 冲突
    在两个或者多个开发人员签出并编辑同一个文件的情况下对同一行代码的两个或者多个不同的更改。

  • 连接
    在源代码管理客户端(例如,Visual Studio)和源代码管理数据库服务器之间的实时数据连接。

  • 数据库
    所有主控副本、历史记录、项目结构和用户信息存储的位置。一个项目总是包含在一个数据库中。多个项目可以存储在一个数据库中,也可以使用多个数据库。数据库其他常用的表述有存储库和存储。

  • 历史记录
    一个文件从其初始被添加到源代码管理以来所做的更改的记录。使用版本控制,您可以返回到文件历史的任何点并恢复存在于那个点的文件。

  • 标签
    附加到受源代码管理项的一个指定版本的用户定义的名称。

  • 本地副本
    在用户工作文件夹中的文件,在签入之前更改保存在该文件其中。本地副本有时称为工作副本。

  • 主控副本
    受源代码管理的文件的最近签入的版本,相对于在您的工作文件夹中的本地副本。主控副本的其他表述有服务器版本和数据库版本。

  • 合并
    合并一个文件的两个或者多个更改版本的差异的过程。合并可能影响同一个文件的不同版本或者对于同一个文件版本所做的不同更改。

  • 共享文件
    有驻留在多个源代码管理位置的版本的文件。共享文件的其他表述有副本和快捷方式。

  • 解决方案根目录
    数据库中的一个空文件夹,它包含一个受源代码管理的解决方案中所有的项。默认情况下,此文件夹为 <solutionname>.root。

  • 超级统一根目录
    一个虚拟容器,受源代码管理的解决方案中所有的项目和文件都位于它的下面。例如 [SUR]:\ 是一个受源代码管理的解决方案的超级统一根目录,解决方案包含位于 [SUR]:\C:\Solution\ProjOne 和 [SUR]:\D:\ProjTwo 的项目。

  • 统一根目录
    到受源代码管理的解决方案或者项目中所有工作文件夹和文件的上级目录的路径。例如,C:\Solution 是一个受源代码管理解决方案的统一根目录,解决方案包含位于 C:\Solution、C:\Solution\ProjOne 和 C:\Solution\ProjTwo 的文件。

  • 工作文件夹
    受源代码管理项的本地副本存储的位置,通常位于您自己的计算机上的。工作文件夹的另一种表述是工作区。

请参见

任务

如何:禁止创建 <solutionname>.root 文件夹

参考

“新建项目”对话框