从 Visual SourceSafe 迁移

您可以使用 Team Foundation VSSConverter 命令行工具,将项目、文件、版本历史记录、标签和用户信息从 Visual SourceSafe 数据库迁移到 Team Foundation 版本控制服务器。 此工具随 Visual Studio Team Foundation Server 提供。

有关 Visual SourceSafe的更多信息,请参见 Microsoft 网站上的以下页面:Source Control for Visual Studio(Visual Studio 源代码管理)。

从 Visual SourceSafe 数据库迁移数据

  1. **了解主要关键概念。**将数据从 Visual SourceSafe 数据库迁移到 Team Foundation 版本控制服务器之前,应了解一些关键概念。 Team Foundation 和 Visual SourceSafe 有着很大功能差异。 因此在迁移时,VSSConverter 必须修改特定类型的数据。

    有关更多信息,请参见本主题后面的 VSSConverter 如何转换数据。

  2. **确保您具有所需权限。**若要执行本主题中的过程,您必须具有几种类型的权限。 有关更多信息,请参见本主题后面的所需权限。

  3. **计划和准备迁移过程。**开始迁移过程前,通过采取计划和准备步骤,可以避免您和您的团队出现严重错误。 有关更多信息,请参见本主题后面的计划和准备迁移过程。

  4. **分析数据。**将数据从 Visual SourceSafe 迁移到 Team Foundation 版本控制时,必须先使用 Visual SourceSafe 转换器的“分析”功能来确定您的数据中是否存在任何会影响迁移结果的问题。 此过程还会生成一个迁移数据所需的用户映射文件。 有关更多信息,请参见本主题后面的分析数据。

  5. **迁移数据。**运行“分析”功能后,即可迁移数据。 若要迁移数据,必须指定迁移用户名的方式,创建一个迁移设置文件,然后运行“迁移”命令。 有关更多信息,请参见本主题后面的迁移数据。

  6. **验证迁移并解决问题。**运行完“迁移”功能后,应执行以下步骤:

    • 检查“迁移”功能生成的报表。

    • 检查 Team Foundation 版本控制服务器上的数据,以确保正确迁移了 Visual SourceSafe 数据库的数据。

    执行完这些步骤后,可能必须将出现的问题解决。 有关更多信息,请参见本主题后面的验证迁移和解决问题。

所需权限

若要执行本主题中的过程,您必须具有以下权限:

  • 在包含要迁移的数据的 Visual SourceSafe 数据库中,您必须知道**“管理员”**帐户的密码。

  • 在迁移计算机(安装有 Visual Studio 的计算机)上,您必须是**“Administrators”**组的成员。

  • 对于 VSSConverter 使用的数据库,您必须具有“创建数据库”权限。 有关更多信息,请参见本主题后面的提供 VSSConverter 使用的数据库。

  • 在 Team Foundation 应用层上,您必须是**“Team Foundation Administrators”**安全组的成员。 有关更多信息,请参见 Team Foundation Server 权限

计划和准备迁移过程

开始迁移过程前,通过采取计划和准备步骤,可以避免您和您的团队出现严重错误。

考虑用于减少所需时间的选项

该转换器提供了一些迁移选项,这些选项可缩短迁移时间或在迁移过程中使团队可在版本控制中工作,从而来最大程度地缩短迁移时间。 评估下列哪个迁移选项对您的团队而言效果最佳:

  • **迁移选定项目:**您可以分次迁移选定项目,而不必迁移整个 Visual SourceSafe 数据库。 有关更多信息,请参见本主题后面的 <ProjectMap> 节。

  • **截断一些历史数据:**您可以使用 Visual SourceSafe 的存档功能来迁移部分历史记录。 如果不希望迁移旧历史记录,则可使用此选项。 通过使用此功能,可以删除特定日期前的文件和文件夹版本历史记录。 有关更多信息,请参见本主题后面的截断各项的历史记录。

与团队一起安排迁移

尝试在用户不需要访问您所迁移的 Visual SourceSafe 数据库时安排迁移。 如果您有大量数据或大型团队,或者您已针对项目工作了很长时间,则可能需要较多时间来准备和迁移数据。

重要说明重要事项

迁移过程将要进行时,应通知您的团队成员,并建议他们在迁移过程开始前签入所有文件。

复制和准备 Visual SourceSafe 数据库

按照下面的步骤来复制和准备 Visual SourceSafe 数据库:

  1. **签入文件。**理想情况下,应签入您的 Visual SourceSafe 数据库中的所有文件。 至少应尝试签入尽可能多的文件。

  2. **移除对 Visual SourceSafe 项目的访问权限。**确保您是唯一可访问所迁移的 Visual SourceSafe 项目的人员。

  3. **复制数据库。**按照 Microsoft 网站以下页面上提供的说明操作:如何备份 Visual SourceSafe 数据库

  4. **升级数据库副本。**如果您的 Visual SourceSafe 数据库版本早于 Visual SourceSafe 6.0,则使用 Visual SourceSafe DDUPD 实用工具将其升级到 Visual SourceSafe 2005。 有关更多信息,请参见 Microsoft 网站上的以下主题:DDUPD Utility(DDUPD 实用工具)。

  5. **(可选)截断各项的历史记录。**有关更多信息,请参见本主题后面的截断各项的历史记录。

  6. **扫描并修复您的数据库副本中的数据完整性问题。**使用 Visual SourceSafe ANALYZE 实用工具找到并修复数据库中的数据完整性问题。 有关如何使用此工具的更多信息,请参见 Microsoft 网站上的以下页面:ANALYZE Utility(ANALYZE 实用工具)和 如何检测和修复 Visual SourceSafe 中的数据库损坏错误

截断各项的历史记录

如果不想迁移 Visual SourceSafe 中存储的所有历史记录,则可以使用 Visual SourceSafe 中的存档功能仅迁移某一特定日期后的历史记录。

警告

使用此方法会从 Visual SourceSafe 数据库中永久删除版本历史记录。因此,请确保您是对 Visual SourceSafe 副本而不是针对正在使用的数据库执行此过程。

要截断 Visual SourceSafe 中的各项历史记录,应使用 Visual SourceSafe 中的存档功能。 可以使用以下任意值来指定要截断历史记录之前的时间戳:

  • 标签

  • 文件夹的版本

  • 日期

有关如何在 Visual SourceSafe 中存档的更多信息,请参见 Visual SourceSafe 存档数据库

提示

Visual SourceSafe 存档功能具有 2 GB 存档文件大小限制。 如果此过程期间出现错误,请尝试分别存档较小的项目。

准备迁移计算机

按照以下步骤准备迁移计算机:

  1. 确保计算机具有足够的可用磁盘空间来完成迁移过程。 若要估计需要多少磁盘空间,请总计以下各项:

    • 供 VSSConverter 用来创建临时文件和生成日志文件的 5 GB 磁盘空间。

    • 两倍于要迁移的 Visual SourceSafe 数据库中的项目大小的磁盘空间。

    • 足够安装以下步骤中所述应用程序的磁盘空间。

  2. 在迁移计算机上安装 Visual Studio。 

    重要说明重要事项

    VSSConverter 需要一个数据库(SQL Server Express 或 SQL Server)才能工作。 默认情况下,安装 Visual Studio 时就会安装 SQL Server Express,并且会授予您正常使用 VSSConverter 所需的权限。 有关更多信息,请参见本主题后面的提供 VSSConverter 使用的数据库。

  3. 在迁移计算机上安装 Visual SourceSafe 2005。

  4. 安装与 Microsoft 知识库中的文章 950185 关联的更新。 您可以从 Microsoft 网站的以下页面获取此软件:KB950185 - VSS Required QFE for Orcas SP1 VSSConverter(KB950185 - VSS 需要用于 Orcas SP1 VSSConverter 的 QFE)。

  5. 确保按照复制和准备 Visual SourceSafe 数据库中的步骤操作。

  6. 将 Visual SourceSafe 数据库复制到迁移计算机上的一个文件夹中。

    警告

    如果使用文件共享来使迁移计算机能够访问 Visual SourceSafe 数据库中的数据而不是复制数据库,则必须向用来登录迁移计算机的帐户提供“读取”和“修改”访问权限。不建议使用这种方法,因为它可能会延长迁移过程。

    重要说明重要事项

    无论如何设置迁移计算机来访问 Visual SourceSafe 数据库,都应确保对数据库副本而不是所使用的数据库来运行迁移过程。 这种方法有助于保护您的数据。

提供 VSSConverter 使用的数据库

VSSConverter 需要一个数据库(SQL Server Express 或 SQL Server)才能工作。 默认情况下,安装 Visual Studio 时将安装 SQL Server Express。 如果决定在安装 Visual Studio 时清除此选项,则必须以后手动安装 SQL Server Express 或使用 SQL Server 作为数据库。

无论使用哪个数据库,您都必须对该数据库具有“创建数据库”权限。 对于 SQL Server Express,如果您将其随 Visual Studio 一起安装,则将自动授予您此权限。

如果要使用 SQL Server 而不是 SQL Server Express,则必须修改设置文件。 有关更多信息,请参见本主题后面的 <SQL> 元素。

准备 Team Foundation Server 实例

按照以下步骤准备迁移计算机:

  1. 确保 Team Foundation 的数据层具有足够的可用存储空间。 您可能需要大约两倍于所迁移 Visual SourceSafe 数据库中项目的数据大小的空间。

    此要求可能较高或较低,具体取决于以下因素:

    • 所迁移的 Visual SourceSafe 数据库的大小。

    • 所迁移操作的数目。

  2. “迁移”功能要求您的 Team Foundation 版本控制服务器上已经存在团队项目集合和团队项目,然后迁移过程才能开始。 如果在要将 Visual SourceSafe 数据迁移到的服务器上还没有团队项目集合或团队项目,则应执行以下一个或两个步骤:

    • 创建一个团队项目集合,您需要将数据从 Visual SourceSafe 数据库迁移到该团队项目集合。 有关更多信息,请参见创建团队项目集合

    • 创建要将数据从 Visual SourceSafe 数据库迁移到其中的一个或多个团队项目。 有关更多信息,请参见创建团队项目

分析数据

将数据从 Visual SourceSafe 迁移到 Team Foundation 版本控制之前,应先使用 Visual SourceSafe 转换器的“分析”功能确定您的数据中是否存在任何影响迁移结果的问题。 此功能还会生成一个用户映射文件,“迁移”功能将使用此文件来迁移数据。

创建分析设置文件

若要使用“分析”功能,必须创建一个设置文件。 在此文件中,应指定将迁移的 Visual SourceSafe 数据库的路径以及要迁移的文件夹。

以下 XML 是分析设置文件的示例。

<?xml version="1.0" encoding="utf-8"?>
<SourceControlConverter>
<ConverterSpecificSetting>
     <Source name="VSS">
          <VSSDatabase name="c:\ourvss"></VSSDatabase>
          <UserMap name="c:\ourvss\migrate\Usermap.xml"></UserMap>
     </Source>
     <ProjectMap>
          <Project Source="$/Core"></Project>
          <Project Source="$/ProjectA"></Project>
          <Project Source="$/ProjectB"></Project>
     </ProjectMap>
</ConverterSpecificSetting>
<Settings>
     <Output file="c:\ourvss\migrate\logs\ContosoVSSAnalyze.xml"></Output>
</Settings>
</SourceControlConverter>

您可以复制以上示例,将其粘贴到您自己的设置文件中,然后进行修改。 以下信息可帮助您修改示例以满足您的需要。

<?xml encoding> 特性

<?xml encoding> 特性必须与您的设置文件中所用的编码匹配。 例如,如果以 Unicode 保存文件,则 <?xml encoding> 标记如下:

<?xml version="1.0" encoding="unicode">

<VSSDatabase name> 特性

在 <VSSDatabase name> 特性中,为所迁移的 Visual SourceSafe 数据库的副本指定包含 srcsafe.ini 文件的文件夹的路径。下面是示例代码。

<Source name="VSS">
   ...
   <VSSDatabase name="c:\ourvss"></VSSDatabase>
   ...
</Source>

该路径不能包含字符串 srcsafe.ini。 例如,下面的 <VSSDatabase name> 特性是不正确的,将导致 VSSConverter 命令失败:

<Source name="VSS">
   ...
   <VSSDatabase name="c:\ourvss\srcsafe.ini"></VSSDatabase>
   ...
</Source>

<UserMap name> 特性

“分析”功能收集并编译关于您的 Visual SourceSafe 用户的数据,并将其存储在一个 XML 文件中。 此外,也可以在 <UserMap name> 特性中指定存储此数据的文件的路径和名称。 如果不指定此特性,则“分析”功能会创建一个名为 UserMap.xml 的文件,并将其放在当前目录中。

<ProjectMap> 节

在 <ProjectMap> 节中,在 <Project> 项的 Source 特性中指定要迁移的每个 Visual SourceSafe 项目的路径。

若要迁移 Visual SourceSafe 数据库中的所有数据,应使 <ProjectMap> 节与以下示例匹配:

<ProjectMap>
   <Project From="$/"></Project>
</ProjectMap>

您可以分次迁移选定的项目,而不必同时迁移整个 Visual SourceSafe 数据库, 有大量数据要迁移时,此选项可以帮助您避免在迁移过程中阻碍团队。

“Source”特性中的路径不能重叠。 例如,下面的 <ProjectMap> 节无效:

<ProjectMap>
   <Project Source="$/ProjectA"></Project>
   <Project Source="$/ProjectA/Controller"></Project>
</ProjectMap>

<Output file> 特性

在 <Settings> 节的 <Output file> 特性中,可以指定希望将分析报告写入其中的文件的路径和名称。 如果不指定此特性,则转换器会将报告写入一个名为 VSSAnalysisReport.xml 的文件,并将其放入当前目录。

<SQL> 元素

若要指示转换器使用 SQL Server 而不使用 SQL Server Express,可以将一个 <SQL> 元素添加到迁移设置文件的 <Source> 节。 此元素使用以下语法:<SQL Server="SQL_Server_name"></SQL>.

例如,下面的 <SQL> 元素指示服务器是“ContosoSQLServer”:

<Source name="VSS">
   ...
   <SQL Server="ContosoSQLServer"></SQL>
   ...
</Source>

运行“分析”命令

使用转换器分析项目

  1. 单击**“开始”,依次指向“所有程序”“Microsoft Visual Studio 2010”“Visual Studio 工具”,右击“Visual Studio 10.0 命令提示”,然后单击“以管理员身份运行”**。

    如果此时出现**“用户帐户控制”对话框,请单击“继续”**。

  2. 键入以下命令行:

    VSSConverter Analyze settings.xml

    将 settings.xml 替换为您所创建的分析设置文件的路径和名称。

  3. 出现提示时,请提供 Visual SourceSafe 的管理员密码。

    “分析”功能执行时,VSSConverter 会显示当前状态。 当此过程完成时,“分析”功能会生成一个报表和一个用户映射文件。

检查并解决“分析”功能找到的问题

分析报表将提供有关您的 Visual SourceSafe 数据库中问题的信息,这些问题可能会在迁移期间导致问题。 按照下一节所述,尝试解决尽可能多的问题,以便最大程度地减少迁移过程的问题。

某些文件已签出

此报表列出了当前已签出的文件。 迁移过程不会保留签出信息。 理想情况下,您的 Visual SourceSafe 数据库中的所有文件都应签入。 至少应尝试签入尽可能多的文件。

某些项具有数据完整性问题

此报表列出了数据完整性已被破坏的项。 这些项将不会迁移。 Visual SourceSafe ANALYZE 实用工具可能能够修复这类问题。 有关更多信息,请参见 Microsoft 网站上的以下页面:ANALYZE Utility(ANALYZE 实用工具)和 How to Detect and Fix Database Corruption Errors in Visual SourceSafe(如何检测和修复 Visual SourceSafe 中的数据库损坏错误)。

已映射项目中的一些文件夹包含的历史记录未包含在 <ProjectMap> 节中

如果 Visual SourceSafe 数据库中的一个文件夹从一个项目移动到另一个项目,则该文件夹的历史记录将同时包含在原始项目和当前项目中。 若要迁移这样的文件夹及其全部历史记录,必须同时迁移原始项目和当前项目。

例如,您正在迁移 Visual SourceSafe 项目 Project2。 此项目包含文件夹 $/Project2/FeatureA,此文件夹是从 Project1 中其历史记录中的某一点移动的。

如果 <ProjectMap> 节包含…

例如…

那么…

两个项目。

<ProjectMap>
   <Project Source="$/Project1"></Project>
   <Project Source="$/Project2"></Project>
</ProjectMap>

将迁移该文件夹及其全部历史记录。

最初包含该文件夹的项目,而不是当前包含该文件夹的项目。

<ProjectMap>
   <Project Source="$/Project1"></Project>
</ProjectMap>

不迁移该文件夹。

当前包含该文件夹的项目,而不是最初包含该文件夹的项目。

<ProjectMap>
   <Project Source="$/Project2"></Project>
</ProjectMap>

从移动到当前项目的时间点开始,迁移该文件夹及其历史记录。 将不迁移该文件夹移动到当前项目之前的历史记录。

有关设置文件的 <ProjectMap> 节的更多信息,请参见本主题前面的 <ProjectMap> 节。

Team Foundation 版本控制不支持某些标签名称

报表将列出迁移时发生更改的标签名称,因为这些名称包含 Team Foundation 版本控制不支持的字符。

迁移数据

运行“分析”功能后,即可迁移数据。 运行“迁移”命令前,必须先创建一个迁移设置文件。 此外,还可以指定迁移用户名的方式。

指定迁移用户名的方式

您可以控制如何将用户信息从 Visual SourceSafe 迁移到 Team Foundation 版本控制。 具体来说,您可以指定“迁移”功能应与 Team Foundation 版本控制中每项的历史记录中的每个变更集关联的用户名。 具体方法是,编辑运行“分析”功能时创建的用户映射文件,本主题前面对此进行了介绍。

用户映射文件是可选的。 如果设置文件中省略 <UserMap> 元素,则每个变更集都会按以下方式生成:

  • “用户”字段设置为运行 VSSConverter 的帐户的名称。

  • 在您的 Visual SourceSafe 数据库中执行操作的用户的名称存储在“注释”字段中。

用户映射文件示例

运行“分析”功能时,它会编译关于您的 Visual SourceSafe 用户的数据,并将其存储在一个 XML 文件中。 此文件会列出在所迁移的 Visual SourceSafe 项目中曾执行过版本控制操作的每个 Visual SourceSafe 用户。

下面的示例演示由 Visual SourceSafe 转换器“分析”功能所创建的一个用户映射文件。

<?xml version="1.0" encoding="utf-8"?>
<UserMappings>
   <UserMap From="Admin" To=""></UserMap>
   <UserMap From="Guest" To=""></UserMap> 
   <UserMap From="Kim" To=""></UserMap>
   <UserMap From="Satomi" To=""></UserMap>
   <UserMap From="Mark" To=""></UserMap>
</UserMappings>

在用户映射文件中,可以不指定、指定部分或全部 UserMap 项的 To 特性。 例如,可以按以下方式修改上面的示例:

<?xml version="1.0" encoding="utf-8"?>
<UserMappings>
   <UserMap From="Admin" To="NORTHAMERICA\KenM"></UserMap>
   <UserMap From="Guest" To="Test1"></UserMap> 
   <UserMap From="Kim" To="EUROPE\KimT"></UserMap>
   <UserMap From="Satomi" To="ASIA\SatomiH"></UserMap>
   <UserMap From="Mark" To=""></UserMap>
</UserMappings>

请注意,在上面的示例中,Guest 映射到 Test1,未指定任何域。 在这种情况下,VSSConverter 假定该帐户属于默认域。

如果不指定 <UserMap To> 特性,则将按以下方式生成每个变更集:

  • “用户”字段设置为运行 VSSConverter 的帐户的名称。

  • 在您的 Visual SourceSafe 数据库中执行操作的用户的名称存储在“注释”字段中。

  • 如果指定 <UserMap To> 特性,并且其值是运行 Team Foundation 的服务器上的有效用户,则“用户”字段将设置为该帐户的名称。 如果值不是运行 Team Foundation 的服务器上的有效用户,则 VSSConverter 将显示错误并结束迁移过程。

创建迁移设置文件

使用迁移设置文件,可以指定要迁移的 Visual SourceSafe 数据,并控制迁移方式的多个方面。 创建此文件的最简单方法是复制在本主题前面的创建分析设置文件中创建的文件。 然后,可向该文件添加更多数据,以便“迁移”功能使用。

下面的示例演示了一个迁移设置文件。

<?xml version="1.0" encoding="utf-8"?>
<SourceControlConverter>
<ConverterSpecificSetting>
     <Source name="VSS">
          <VSSDatabase name="c:\ourvss"></VSSDatabase>
          <UserMap name="c:\ourvss\migrate\Usermap.xml"></UserMap>
     </Source>
     <ProjectMap>
          <Project Source="$/Core" Destination="$/CoreTeamProject"></Project>
          <Project Source="$/ProjectA" Destination="$/ClientTeamProject/ProjectA"></Project>
          <Project Source="$/ProjectB" Destination="$/ClientTeamProject/ProjectB"></Project>
     </ProjectMap>
</ConverterSpecificSetting>
<Settings>
     <TeamFoundationServer name="My_Server" port="8080" protocol="http" collection="tfs/DefaultCollection"></TeamFoundationServer>
     <Output file="c:\ourvss\migrate\logs\ContosoVSSMigrate.xml"></Output>
</Settings>
</SourceControlConverter>

下面的信息可帮助您修改设置文件,以指定“迁移”功能迁移数据的方式。

<Project Destination> 特性

对于设置文件的 <ProjectMap> 节中的每个 <Project> 元素,需要提供一个 Destination 特性以指定 Team Foundation 版本控制服务器上的位置路径,您需要将 Visual SourceSafe 数据库(在 Source 特性中指定)中的项目的内容迁移到此位置。

例如,您要将 Visual SourceSafe 数据库中 ProjectA 的内容迁移到名为 Client 的团队项目的根位置处的 ProjectA 中。

<ProjectMap>
   <Project Source="$/ProjectA" Destination="$/ClientTeamProject/ProjectA"></Project>
</ProjectMap>

若要使 Destination 特性中的值有效,必须满足以下条件:

  • Destination 特性中的团队项目(在上面的示例中,团队项目为 ClientTeamProject)必须在开始迁移过程前已经位于团队项目集合中。

  • 如果 Destination 特性中的文件夹(在上面的示例中,文件夹为 ProjectA)已经位于团队项目中,则该文件夹必须为空。

  • <Project> 元素的 Destination 特性中的路径不能与任何其他 <Project> 元素的 Destination 特性重叠。 例如,下面的 <ProjectMap> 节无效:

    <ProjectMap>
       <Project Source="$/ProjectA" Destination="$/ClientTeamProjectA/"></Project>
       <Project Source="$/ProjectB" Destination="$/ClientTeamProjectA/ProjectB"></Project>
    </ProjectMap>
    

<TeamFoundationServer> 标记

在 <Settings> 节中添加一个 <TeamFoundationServer> 标记,并使用以下格式来指定团队项目集合在运行 Team Foundation Server 的服务器上的名称、端口、协议和路径。

<TeamFoundationServer name="ServerName" port="PortNumber" protocol="http" collection="path/collection name></TeamFoundationServer>

<Label migrate="false" /> 标记

如果您的 Visual SourceSafe 数据库包含很多应用于多个文件的标签,则迁移过程可能需要较长时间。 如果您的团队不需要此数据,则可将 VSSConverter 配置为忽略标签,方法是向 <Settings> 节添加 <Label migrate="false" /> 标记。

<Output file> 特性

在 <Settings> 节的 <Output file> 特性中,可以指定希望将迁移报告写入其中的路径和文件。 如果不包含此特性,则转换器会将报告写入一个名为 VSSMigrationReport.xml 的文件,并将其放入当前目录。

运行“迁移”命令

运行“迁移”命令

  1. 单击**“开始”,依次指向“所有程序”“Microsoft Visual Studio 2010”“Visual Studio 工具”,右击“Visual Studio 10.0 命令提示”,然后单击“以管理员身份运行”**。

    如果此时出现**“用户帐户控制”对话框,请单击“继续”**。

  2. 在命令提示符下,键入以下命令行:

    VSSConverter Migrate settings.xml

    将 settings.xml 替换为您所创建的迁移设置文件的路径和名称。

    “迁移”功能会显示您从 Visual SourceSafe 数据库迁移的每个项目以及 Team Foundation 版本控制服务器上要迁移入数据的每个文件夹。

  3. 出现提示时,请按 Y 确认迁移。

  4. 出现提示时,键入管理您的 Visual SourceSafe 数据库的用户的密码。

在此过程中,“迁移”功能会在命令提示窗口中显示其当前状态。

使用增量迁移继续迁移过程

如果迁移过程出于某种原因被中断,则可以增量迁移方式从过程停止的点继续该过程。 当迁移过程由于错误或网络问题而失败时,增量迁移非常有用。 在增量迁移期间,转换器将只迁移在前面的会话中未迁移的数据。

若要开始增量迁移,请按照运行“迁移”命令中的步骤操作。 当“迁移”功能询问您是否要执行增量迁移时,请按 Y

增量迁移的限制

必须符合以下限制,增量迁移才能成功:

  • 在 Visual SourceSafe 数据库中,不得执行销毁、清除、存档或还原活动。

  • 不能更改迁移设置文件的 <ProjectMap> 节。

  • 在 Team Foundation 版本控制服务器上,不得修改在迁移设置文件的 <ProjectMap> 节中指定的任何文件夹(或这些文件夹中的任何内容)。

验证迁移和解决问题

运行完“迁移”功能后,应执行以下步骤:

  • 检查“迁移”功能生成的报表。

  • 检查 Team Foundation 版本控制服务器上的数据,确保数据迁移正确。

执行完这些步骤后,可能必须将出现的问题解决。

如何解决超出 SQL Server Express 存储限制的问题

默认情况下,VSSConverter 使用 SQL Server Express 来存储临时元数据。 这种元数据通常只需要所迁移数据总大小的很小百分比。 万一迁移因达到 SQL Server Express 的 4 GB 限制而失败,则您可以应用设置来使转换器使用 SQL Server 部署。 有关更多信息,请参见本主题前面的 <SQL> 元素。

转换采用 MS-DOS 兼容短名称 (8.3) 格式的文件 (TF227014)

Team Foundation 版本控制不允许文件名采用 MS-DOS 兼容短名称 (8.3) 格式(例如,abcdef~1.txt)。 分析或尝试迁移具有此类名称的文件时,会出现 TF227014 错误。

若要解决此问题,可以对 Team Foundation 的应用层临时应用一个设置,使其允许具有此类名称的文件。 为此,必须在 Team Foundation 的配置数据库中将 Allow8Dot3Paths 设置为 True

重要说明重要事项

为避免支持 MS-DOS 兼容短名称的客户端计算机出现问题,完成迁移过程后,强烈建议您按以下过程所述将 Allow8Dot3Paths 设置为 False

若要执行以下过程,必须在 Team Foundation 的应用层服务器上启用 Windows PowerShell。 有关更多信息,请参见 Microsoft 网站上的以下主题:通过 Windows PowerShell 编写脚本

所需权限

若要执行此过程,您必须是 Team Foundation 的应用层服务器上**“Administrators”**组的成员。 有关更多信息,请参见 Team Foundation Server 权限

迁移包含以 MS-DOS 兼容短名称格式命名的文件的 Visual SourceSafe 数据库

  1. 登录到 Team Foundation 的应用层服务器。

  2. 创建一个名为 Allow8Dot3Paths 的 Windows PowerShell 脚本。

    1. 复制 Allow8Dot3Paths PowerShell 脚本中的文本,并将其粘贴到该脚本中。

    2. 更改服务器路径,使其与用来连接到 Team Foundation Server 的 URL 中的路径匹配。 默认情况下,服务器路径为“tfs”。

    3. 更改集合名称,以与要向其中迁入数据的团队项目集合的名称匹配(例如,DefaultCollection)。

      例如,最终结果为脚本中的以下行:

      $collectionBaseUrl = "https://localhost:8080/tfs/DefaultCollection/";
      
  3. 运行 Allow8Dot3Paths 脚本。

  4. 回收 Team Foundation 的应用程序池。

    1. 依次单击**“开始”“管理工具”“计算机管理”**。

    2. 在导航窗格中,展开**“服务和应用程序”**。

    3. 单击**“Internet 信息服务(IIS)管理器”,展开本地计算机,然后双击“应用程序池”**。

    4. 右击应用程序池,然后单击**“回收”**。

  5. 运行“迁移”命令。

    有关更多信息,请参见运行“迁移”命令。

  6. 修改前面创建的 Allow8Dot3Paths Windows PowerShell 脚本,将“true”替换为“false”。

  7. 运行修改后的 Allow8Dot3Paths 脚本。

  8. 回收 Team Foundation 的应用程序池。

    1. 依次单击**“开始”“管理工具”“计算机管理”**。

    2. 在导航窗格中,展开**“服务和应用程序”**。

    3. 单击**“Internet 信息服务(IIS)管理器”,展开本地计算机,然后双击“应用程序池”**。

    4. 右击应用程序池,然后单击**“回收”**。

  9. 打开团队资源管理器,然后连接到要在其中迁移入数据的团队项目集合。

  10. 在**“源代码管理资源管理器”**中,重命名文件名采用 MS-DOS 兼容短名称 (8.3) 格式的所有文件。

Allow8Dot3Paths PowerShell 脚本

# Load client OM assembly.
[Reflection.Assembly]::Load("Microsoft.TeamFoundation.Client, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");

$collectionBaseUrl = "https://localhost:8080/ServerPath/CollectionName/";

$tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($collectionBaseUrl);
$collectionHive = $tfs.GetService([Microsoft.TeamFoundation.Framework.Client.ITeamFoundationRegistry]);

# Set some version control settings in the collection hive.
$collectionHive.SetValue("/Service/VersionControl/Settings/Allow8Dot3Paths", "True");

# Display all version control settings as a table.
$collectionHive.ReadEntries("/Service/VersionControl/Settings/...") | ft -a

VSSConverter 如何转换数据

Team Foundation 和 Visual SourceSafe 有着很大功能差异。 因此在迁移时,VSSConverter 必须修改特定类型的数据。

变更集

Team Foundation 版本控制的一个关键功能是,它可在用户签入变更集时,将对多个文件的更改组合成一个单元。 这个单元称为变更集。

Visual SourceSafe 没有与变更集等效的功能。 但是,在转换过程中,只要满足以下条件,每组更改都会组合到一个变更集中:

  • 更改不会相互冲突。 例如,两个操作不会影响同一个文件或文件夹。

  • 所发生的各个更改之间的时间间隔不超过几分钟。

  • 更改是由同一用户签入的。

  • 这些更改具有相同的签入注释。

有关更多信息,请参见使用变更集

共享和固定

在 Visual SourceSafe 中,您可在多个文件夹间共享一个文件。 在一个共享文件中所做的更改会在共享该文件的文件夹之间复制。 Team Foundation 版本控制没有等效功能。 在迁移期间,可通过在 Team Foundation 版本控制服务器上创建该项的其他独立副本来迁移 Visual SourceSafe 项目中的共享文件。

Team Foundation 版本控制没有与 Visual SourceSafe 中的“固定”功能等效的功能。 在迁移期间,Visual SourceSafe 项目中的已固定项将转换为 Team Foundation 版本控制服务器上的标记项。 有关更多信息,请参见下一节。

有关 Team Foundation 版本控制中标签的更多信息,请参见使用标签获取文件快照

历史记录数据

Visual SourceSafe 数据库中的项的历史记录中的每个事件都会作为变更集转换到您的 Team Foundation 版本控制服务器上。 迁移过程完成后,可在“历史记录”窗口中查看这些数据。 有关更多信息,请参见使用“历史记录”窗口

迁移期间,会进行一些数据更改。

迁移有关用户名以及日期和时间戳数据的方式

Visual SourceSafe 数据库中的项的历史记录中的每个条目迁移到 Team Foundation 版本控制服务器上的变更集中时,将发生了以下更改:

  • 将变更集的日期和时间戳设置为该项的迁移日期和时间。

  • 原始日期和时间戳存储在变更集的“注释”字段中。

  • 用户名存储在变更集的“用户”字段或“注释”字段中,具体取决于用户映射过程的结果。 有关更多信息,请参见本主题前面的指定迁移用户名的方式。

转换特定事件类型的方式

编辑、重命名和删除等事件将直接从 Visual SourceSafe 数据库迁移到 Team Foundation 版本控制服务器上的变更集中。 但是,VSSConverter 会以您可能预见不到的方式迁移一些事件,如下表所示。

Visual SourceSafe 事件

迁移到 Team Foundation 的方式

添加文件或文件夹

此变更集是所迁移的每个文件和文件夹的历史记录中的第一个事件。

与在 Visual SourceSafe 中不同,对于其包含的每个子项的父级,不会记录任何事件。

分支

在 Visual SourceSafe 中,共享是分支的一个前置条件,但 Team Foundation 版本控制不支持共享。因此,迁移已分支文件会在目标文件夹中创建该文件的一个副本。 

通过在共享存在的文件时复制该文件版本并在目标文件夹中放置其副本,您的 Visual SourceSafe 数据库中的共享文件将迁移到 Team Foundation 版本控制。 此后,每个变更集都将复制到该文件的两个副本中,直到分支事件发生。

用标签标记文件 

在 Team Foundation 中,可以将标签应用到某个版本的文件或文件夹。 在 Visual SourceSafe 中,可以用标签显式或隐式来标记文件。 在 Visual SourceSafe 中用标签显式标记文件时,会创建该文件的新版本。如果使用该标签来获取文件,则会得到与创建该标签时存在的文件版本对应的文件的内容。 为了迁移显式标签,转换器将获取与 Visual SourceSafe 中用标签标记的版本对应的标签,并将其应用到 Team Foundation 中的版本。 但是,它不会创建新版本。

在 Visual SourceSafe 中对文件夹应用标签时,标签会隐式应用到该文件夹下的所有文件和文件夹,转换器不会创建新版本。 对于隐式标签,转换器不执行任何操作,原因是在迁移该文件夹上的显式标签期间,将自动标记 Team Foundation 中的对应版本。

注意注意
如果您的 Visual SourceSafe 数据库包含很多应用于多个文件的标签,则迁移过程可能需要较长时间。如果您的团队不需要此数据,则可将 VSSConverter 配置为忽略标签。有关更多信息,请参见本主题前面的 <Label migrate="false" />。

用标签标记文件夹

在 Visual SourceSafe 中,在对文件夹应用标签时,将会隐式标记该文件夹下的所有文件和文件夹,不会创建新版本。 在迁移这些文件夹期间,转换器将标签应用于 Team Foundation 中该文件夹的对应版本。 此行为会自动将标签应用于已标记文件夹内文件和文件夹的当前版本。

注意注意
如果您的 Visual SourceSafe 数据库包含很多应用于多个文件的标签,则迁移过程可能需要较长时间。如果您的团队不需要此数据,则可将 VSSConverter 配置为忽略标签。有关更多信息,请参见 <Label migrate="false" />。

移动文件夹

“移动文件夹”事件会在 Team Foundation 中创建该文件夹的一个新版本。

除非同时迁移源文件夹和目标文件夹,否则 VSSConverter 将不会迁移各项的完整历史记录。 有关更多信息,请参见检查并解决“分析”功能找到的问题。

注意注意
如果移动文件夹事件与还原事件组合,则可能不会正确迁移历史记录数据。

还原

不迁移还原事件之前产生的任何历史记录数据。

固定和取消固定

Team Foundation 版本控制不支持固定。 VSSConverter 通过创建两个标签来迁移已固定的文件。

PINNED_LATEST 标签应用于已固定文件的固定版本以及已取消固定文件的最新版本。 PINNED 标签仅应用于已固定文件的固定版本。 迁移后,PINNED_LATEST 标签将检索与在 Visual SourceSafe 中执行“获取最新版本”操作所获得的文件相同的文件。 但是,如果固定文件后发生了签入以外的事件(如重命名或删除文件),则 PINNED_LATEST 标签可能会返回不同的文件。

共享

Team Foundation 版本控制不支持共享。 通过在共享存在的文件时复制该文件版本并在目标文件夹中放置其副本,您的 Visual SourceSafe 数据库中的共享文件将迁移到 Team Foundation 版本控制。 此后,每个变更集都将复制到该文件的两个副本中。

撤消删除文件或文件夹

在迁移文件或文件夹的撤消删除事件期间,转换器将在 Team Foundation 中重播该事件以创建新版本的文件和文件夹。

VSSConverter 创建一个变更集,其中包含文件或文件夹名称、撤消删除的日期和时间以及用户名。

源代码管理绑定

VSSConverter 将为每个解决方案还原版本控制绑定。