使用 VSSUpgrade 命令提示符工具从 Visual SourceSafe 升级

在大多数情况下,应使用 VSS 升级向导 而不是 VssUpgrade 命令提示工具来升级 Visual SourceSafe 数据。 但是,当您可能希望使用 VssUpgrade 命令提示工具升级到本地 Team Foundation server (TFS) 时,存在几种情况。

要使用 VSSUpgrade 升级 Visual SourceSafe 数据

  1. 了解工具如何转换数据 TFS 和 Visual SourceSafe 存在很大的功能差异。 因此,在升级过程中,Visual SourceSafe 升级工具修改特定类型的数据。

  2. 准备升级,在开始升级进程之前,务必要提前计划和准备您的数据。

    重要

    您必须先在 Visual SourceSafe 存储库中运行 Visual SourceSafe ANALYZE 实用工具,然后才能使用向导。请参阅复制和准备 Visual SourceSafe 数据库

  3. 了解独特的 VssUpgrade 功能。 如果您不需要其中任何一个,则应转而使用 VSS 升级向导

  4. 分析数据将数据从 Visual SourceSafe 升级至 Team Foundation 版本控制 时,您必须先使用“分析”命令来确定数据中是否存在任何会影响升级结果的问题。 此过程还会生成一个升级数据所需的用户映射文件。

  5. 升级数据 若要升级数据,必须指定升级用户名的方式,创建一个迁移设置文件,然后运行“迁移”命令。

  6. 查看并验证结果,并在必要时解决问题

VssUpgrade 功能

使用 VssUpgrade 进行升级并将您的数据通过端口传输至本地团队项目:

  • 执行作为自动方法部分内容的升级,例如,脚本。

  • 通过您指定的文件夹结构,将多个 Visual SourceSafe 项目迁移到单个团队项目。

  • 指定用户数据转换方式,例如,从 Visual SourceSafe 中 Kim 转换到 TFS 中EUROPE\KimT。

  • Visual SourceSafe 数据中的忽略标签。

  • 在中断后,应继续该进程,同时升级大量数据;例如,由于网络错误而出现中断时。

如果您不需要这些功能,或者如果您需要升级数据并将其导入 Team Foundation Service 上的团队项目,则应使用 VSS 升级向导,而不是 VssUpgrade。

分析数据

将数据从 Visual SourceSafe 升级至 TFS 版本控制时,您必须先使用“分析”命令来确定数据中是否存在任何会影响升级结果的问题。 此命令还会生成一个用户映射文件,“迁移”命令将使用此文件来升级数据。

ms253090.collapse_all(zh-cn,VS.110).gif创建分析设置文件

运行“分析”命令前,必须先创建一个分析设置文件。 在此文件中,应指定要升级的 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>

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

ms253090.collapse_all(zh-cn,VS.110).gif<?xml encoding> 特性

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

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

ms253090.collapse_all(zh-cn,VS.110).gif<VSSDatabase name> 特性

在 <VSSDatabase name> 特性中,为所升级的 Visual SourceSafe 数据库的副本指定包含 srcsafe.ini 文件的文件夹的路径。例如:

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

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

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

ms253090.collapse_all(zh-cn,VS.110).gif<UserMap name> 特性

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

ms253090.collapse_all(zh-cn,VS.110).gif<ProjectMap> 节

在 <ProjectMap> 部分,在 <Project> 项的 Source 特性中指定要升级的每个 Visual SourceSafe 项目的路径。

若要升级 Visual SourceSafe 数据库中的所有数据,请使 <ProjectMap> 部分与以下示例匹配:

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

您可以分次升级选定的项目,而不必同时升级整个 Visual SourceSafe 数据库。

提示

有大量数据要升级时,使用此选项以避免在升级期间阻碍团队。

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

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

ms253090.collapse_all(zh-cn,VS.110).gif<Output file> 特性

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

ms253090.collapse_all(zh-cn,VS.110).gif<SQL> 元素

您必须为 VssUpgrade 指定数据库,以用于存储临时数据,方法是将 <SQL> 元素添加到“分析”设置文件的 <Source> 部分。 此元素使用以下语法:<SQL Server="SQL_Server_name"></SQL>.

例如,如果您正在命名为 FABRIKAM-2 的计算机上运行 VssUpgrade,使用同一台计算机上的本地 SQL Server Express 实例:

<Source name="VSS">
   ...
   <SQL Server="fabrikam-2\sqlexpress"></SQL>
   ...
</Source>

要指示转换器使用 SQL Server(例如,名为 FabrikamSQLServer 的服务器)

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

ms253090.collapse_all(zh-cn,VS.110).gif运行“分析”命令

  1. 从 Windows 的**“开始”以管理员身份运行“命令提示”**。

  2. 在**“管理员: 命令提示”**窗口,请输入:

    VssUpgrade Analyze settings.xml

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

  3. 出现提示时,输入您 Visual SourceSafe 数据库的管理员密码。 如果您的数据库没有密码,请按 Enter。

当“分析”命令执行时,VssUpgrade 会显示当前状态。 完成进程后,系统将总结结果。 例如:

Analyze complete.
Analyzed 859 files and 941 folders.
Warnings 0 and Errors 0
Pre-migration report file: C:\VSS\migrate\VSSAnalysisReport.xml

如果有任何警告或错误,可以在 ConverterErrors.txtVSSUpgrade.log 中查找相关的详细信息。

“分析”命令生成:

  • 可用于获取迁移命令可能导致的问题和更改的详细信息的报告。

  • 用户映射文件 (Usermap.xml),可用于说明用户数据在升级过程中的转换方式。

下文对这些文件进行了更加详细的说明。

ms253090.collapse_all(zh-cn,VS.110).gif检查并解决“分析”命令找到的问题

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

ms253090.collapse_all(zh-cn,VS.110).gif某些文件已签出

此报表列出了当前已签出的文件。 升级过程不会保留签出信息。 尝试确保在升级前检查尽可能多的文件。

ms253090.collapse_all(zh-cn,VS.110).gif某些项具有数据完整性问题

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

ms253090.collapse_all(zh-cn,VS.110).gif已映射项目中的一些文件夹包含的历史记录未包含在 <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> 节。

ms253090.collapse_all(zh-cn,VS.110).gifTeam Foundation 版本控制不支持某些标签名称

报表将列出升级时发生更改的标签名称,因为这些名称包含 TFS 版本控制不支持的字符。 请参见 Team Foundation 的命名限制

升级数据

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

ms253090.collapse_all(zh-cn,VS.110).gif指定升级用户名的方式

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

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

  • “用户”字段设置为帐户的名称,而 VssUpgrade 在该帐户下运行。

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

ms253090.collapse_all(zh-cn,VS.110).gif用户映射文件示例

运行“分析”命令时,它会编译关于 Visual SourceSafe 用户的数据,并将其存储在一个 XML 文件中。 此文件会列出在要升级的 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,未指定任何域。 在此类情况下,VssUpgrade 假定该帐户属于默认域。

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

  • “用户”字段设置为帐户的名称,而 VssUpgrade 在该帐户下运行。

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

  • 如果指定 <UserMap To> 特性,并且该值是 Team Foundation Server 上的有效用户,则“用户”字段将设置为该帐户的名称。 如果值不是 Team Foundation Server 上的有效用户,则 VssUpgrade 将显示错误并终止升级过程。

ms253090.collapse_all(zh-cn,VS.110).gif创建迁移设置文件

使用“迁移”设置文件,可以指定要升级的 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>

以下信息可帮助您修改迁移设置文件以指定“迁移”命令升级数据的方式。

ms253090.collapse_all(zh-cn,VS.110).gif<ProjectMap>

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

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

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

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

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

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

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

备注

如果在 Destination 属性中的文件夹包含任何项,并且任意 Visual Source Safe 项的路径与这些项的版本控制路径有重叠,则升级过程将失败。

ms253090.collapse_all(zh-cn,VS.110).gif<TeamFoundationServer> 标记

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

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

ms253090.collapse_all(zh-cn,VS.110).gif<Label migrate="false" /> 标记

如果 Visual SourceSafe 数据库包含许多应用于多个文件的标签,则升级过程可能会延长。 如果您的团队不需要此数据,则可将 VssUpgrade 配置为忽略标签,方法是在 <Settings> 部分中添加 <Label migrate="false" /> 标记。

ms253090.collapse_all(zh-cn,VS.110).gif<Output file> 特性

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

ms253090.collapse_all(zh-cn,VS.110).gif运行“迁移”命令

  1. 从 Windows 的**“开始”以管理员身份运行“命令提示”**。

  2. 在**“管理员: 命令提示”**窗口,请输入:

    VssUpgrade Migrate settings.xml

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

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

  3. 出现提示时,输入您 Visual SourceSafe 数据库的管理员密码。 如果您的数据库没有密码,请按 Enter。

  4. 系统总结了运行升级进程的方法,并要求您确认是否要执行。 例如:

    This will start migration with following inputs:
    
    SourceSafe Folders -> Team Foundation Server Folders
    
    $/ -> $/Sequence2
    
    Full history migration of VSS Database: c:\vss
    
    Team Foundation Server: http://fabrikam-4:8080/tfs/DefaultCollection
    Migration Settings File: migrate_settings.xml
    Migration Report: C:\VSS\migrate\VSSMigrationReport.xml
    
    Depending on the VSS database size, migration may take few hours to complete.
    Please verify all inputs are correct and confirm.
    Start migration (Y/N)?
    

    Y 执行。

执行迁移命令时,VssUpgrade 会显示当前状态。 完成进程后,系统将总结结果。 例如:

Verification of pinned versions: 0 file(s) added, 0 file(s) edited and 86 file(s) label updated
Verification of latest tip versions: No change was required (No fixes required. All latest tip versions were migrated successfully)

Started: Creating label "Pinned_Latest".
Finished: Creating label "Pinned_Latest".

Migration complete.
Migrated 6397 Actions
Warnings 7 and Errors 0
Post migration report file: C:\VSS\migrate\VSSMigrationReport.xml

如果有任何警告或错误,可以在 ConverterErrors.txtVSSUpgrade.log 中查找相关的详细信息。

“迁移”命令可生成一份报告,通过此报告,可详细了解“迁移”命令可能造成的问题和导致的更改。 请参见 从 Visual SourceSafe 升级后采取后续步骤

ms253090.collapse_all(zh-cn,VS.110).gif使用增量升级继续此过程

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

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

增量升级的限制

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

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

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

  • 在 Team Foundation Server 上,您不得修改在迁移设置文件的 <ProjectMap> 部分中指定的任何文件夹(或这些文件夹中的任何内容)。

后续步骤

查看并验证结果,并在必要时解决问题