使用 VSSUpgrade 命令提示符工具从 Visual SourceSafe 升级
在大多数情况下,应使用 VSS 升级向导而不是 VssUpgrade 命令提示符工具来升级 Visual SourceSafe 数据。 但在少数几种情况下,你可能需要使用 VssUpgrade 命令提示符工具升级到本地 Team Foundation Server (TFS)。
使用 VSSUpgrade 升级 Visual SourceSafe 数据
了解该工具如何转换数据 TFS 和 Visual SourceSafe 在功能上存在显著的差异。 因此,在升级过程中,Visual SourceSafe 升级工具将修改特定类型的数据。
准备升级 在开始升级过程之前,提前计划和准备你的数据很重要。
重要
你必须先对 Visual SourceSafe 存储库运行 Visual SourceSafe ANALYZE 实用工具,然后再继续操作。请参阅复制和准备 Visual SourceSafe 数据库。
了解独特的 VssUpgrade 功能。 如果你不需要其中的任一功能,则应改用 VSS 升级向导。
分析数据 在将数据从 Visual SourceSafe 升级到 Team Foundation 版本控制之前,你必须先使用“分析”命令来确定数据存在的任何问题是否将影响升级结果。 此过程还会生成一个升级数据所需的用户映射文件。
升级数据 若要升级数据,你必须指定升级用户名的方式,创建一个“迁移”设置文件,然后运行“迁移”命令。
VssUpgrade 功能
在以下情况下使用 VssUpgrade,你需要升级数据并通过端口将数据传输到本地团队项目,并且:
将升级作为自动方法(如脚本)的一部分执行。
通过使用你指定的文件夹结构,将多个 Visual SourceSafe 项目迁移到单个团队项目中。
指定用户数据的转换方式,例如,从 Visual SourceSafe 中的 Kim 转换到 TFS 中的 EUROPE\KimT。
忽略 Visual SourceSafe 数据中的标签。
在升级大量数据期间,在该过程因网络错误等原因导致中断后将其恢复。
如果你不需要其中的任一功能,或者如果你需要升级数据并通过端口将其传输到 Visual Studio Online 上的团队项目,则应使用 VSS 升级向导而不是 VssUpgrade。
分析数据
在将数据从 Visual SourceSafe 升级到 TFS 版本控制之前,你必须先使用“分析”命令来确定数据中的任何问题是否将影响升级结果。 此命令还会生成一个用户映射文件,“迁移”命令可使用此文件来升级数据。
创建“分析”设置文件
在运行“分析”命令之前,你必须先创建一个“分析”设置文件。 在此文件中,应指定将升级的 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>
<SQL Server="SQLInstanceName"></SQL>
</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> 特性是不正确的,将导致 VssUpgrade 命令失败:
<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 Source="$/"></Project>
</ProjectMap>
你可以分次升级选定项目,而不是同时升级整个 Visual SourceSafe 数据库。
提示
如果你需要升级大量数据,使用此选项可避免在升级期间阻碍团队。
“Source”特性中的路径不能重叠。 例如,下面的 <ProjectMap> 节无效:
<ProjectMap>
<Project Source="$/ProjectA"></Project>
<Project Source="$/ProjectA/Controller"></Project>
</ProjectMap>
<Output file> 特性
在 <Settings> 节的 <Output file> 特性中,可以指定希望将分析报告写入其中的文件的路径和名称。 如果你不想指定此选项,则可以忽略 <Output> 标记。 在此情况下,转换器会将报告写入一个名为 VSSAnalysisReport.xml 的文件,并将其放入当前目录。
<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>
运行“分析”命令
从 Windows 的**“开始”中,以管理员身份运行“命令提示符”**。
在**“管理员: 命令提示符”**窗口中,输入:
VssUpgrade Analyze settings.xml
将 settings.xml 替换为你创建的“分析”设置文件的路径和名称。
在系统提示你时,请输入 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.txt 和 VSSUpgrade.log 中查找有关这些警告或错误的详细信息。
“分析”命令生成:
可用于获取有关“迁移”命令可能导致的问题和更改的详细信息的报告。
一个用户映射文件 (Usermap.xml),可用于指定用户数据在升级过程中的转换方式。
下文对这些文件进行了更详细的说明。
查看并解决“分析”命令所发现的问题
分析报表提供有关 Visual SourceSafe 数据库中的问题的信息,这些问题可能会在升级过程中导致出现问题。 按照下一节所述,尝试解决尽可能多的问题,以便最大程度地减少升级过程中出现的问题。
某些文件已签出
此报表列出了当前已签出的文件。 升级过程不保留签出信息。 尝试确保在升级前签入尽可能多的文件。
某些项具有数据完整性问题
此报表列出了数据完整性已被破坏的项。 Visual SourceSafe ANALYZE 实用工具也许能够解决这些类型的问题。 不升级无法修复的项。有关详细信息,请参阅 Microsoft 网站上的以下页面:ANALYZE 实用工具和如何检测和修复 Visual SourceSafe 中的数据库损坏错误。
已映射项目中的一些文件夹包含的历史记录未包含在 <ProjectMap> 节中
如果 Visual SourceSafe 数据库中的一个文件夹从一个项目移动到另一个项目,则该文件夹的历史记录将同时包含在原始项目和当前项目中。 若要升级这样的文件夹及其全部历史记录,必须同时升级原始项目和当前项目。
例如,你正在升级 Visual SourceSafe 项目 Project2。 此项目包含文件夹 $/Project2/FeatureA,此文件夹是从 Project1 中其历史记录中的某一点移动的。
如果 <ProjectMap> 节包含... |
例如... |
那么... |
---|---|---|
两个项目。 |
|
将升级该文件夹及其所有历史记录。 |
最初包含该文件夹的项目,而不是当前包含该文件夹的项目。 |
|
不升级该文件夹。 |
当前包含该文件夹的项目,而不是最初包含该文件夹的项目。 |
|
一旦文件夹移动到当前项目,就会升级该文件夹及其历史记录。 将不升级该文件夹移动到当前项目之前的历史记录。 |
有关设置文件的 <ProjectMap> 节的详细信息,请参阅本主题前面的 <ProjectMap> 节。
Team Foundation 版本控制不支持某些标签名称
报表列出在升级时将发生更改的标签名称,因为这些名称包含 TFS 版本控制不支持的字符。 请参阅 Team Foundation 中的命名限制。
升级数据
运行“分析”命令后,你差不多已准备好升级数据。 运行“迁移”命令前,必须先创建设置文件。 (可选)你可以指定用户名的升级方式。
指定用户名的升级方式
你可以控制如何将用户信息从 Visual Source Safe 升级到 TFS 版本控制。 具体来说,你可以指定“迁移”命令应将哪个用户名与 TFS 版本控制中每个项的历史记录中的每个变更集关联。 具体方法是,编辑运行“分析”命令时创建的用户映射文件,本主题前面对此进行了介绍。
用户映射文件是可选的。 如果从“分析”设置文件中省略 <UserMap name> 特性,则每个变更集都会按以下方式生成:
“用户”字段将设置为用于运行 VssUpgrade 的帐户的名称。
在 Visual SourceSafe 数据库中执行操作的用户的名称将存储到“注释”字段中。
用户映射文件示例
运行“分析”命令时,它会编译有关 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 将显示一个错误并结束升级过程。
创建“迁移”设置文件
使用“迁移”设置文件可指定要升级的 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>
<SQL Server="SQLInstanceName"></SQL>
</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>
以下信息可帮助你修改“迁移”设置文件以指定“迁移”命令升级数据的方式。
<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 项的路径与这些项的版本控制路径重叠,则升级过程将失败。
<TeamFoundationServer> 标记
在 <Settings> 节中,添加 <TeamFoundationServer> 标记,并使用以下格式指定 Team Foundation Server 上团队项目集合的名称、端口、协议和路径:
<TeamFoundationServer name="ServerName" port="PortNumber" protocol="http" collection="path/collection name></TeamFoundationServer>
<Label migrate="false" /> 标记
如果 Visual SourceSafe 数据库包含多个应用于多个文件的标签,则升级过程可能会延长。 如果你的团队不需要此数据,则可将 VssUpgrade 配置为忽略标签,方法是向 <Settings> 节添加 <Label migrate="false" /> 标记。
<Output file> 特性
在 <Settings> 节的 <Output file> 特性中,可以指定希望将升级报告写入到的路径和文件。 如果不包含此特性,则转换器会将报告写入一个名为 VSSMigrationReport.xml 的文件,并将其放入当前目录。
运行“迁移”命令
从 Windows 的**“开始”中,以管理员身份运行“命令提示符”**。
在**“管理员: 命令提示符”**窗口中,输入:
VssUpgrade Migrate settings.xml
将 settings.xml 替换为你创建的“迁移”设置文件的路径和名称。
“迁移”命令会显示你从 Visual SourceSafe 数据库升级的每个项目以及在服务器上针对 Team Foundation 版本控制将数据升级到的每个文件夹。
在系统提示你时,请输入 Visual SourceSafe 数据库的管理员密码。 如果你的数据库没有密码,请按 Enter。
系统将汇总运行升级过程的方法,并要求你确认希望继续执行。 例如:
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.txt 和 VSSUpgrade.log 中查找有关这些警告或错误的详细信息。
“迁移”命令会生成一个报告,可用于详细了解“迁移”命令可能导致的问题和更改。 请参阅从 Visual SourceSafe 升级后采取后续步骤。
使用增量升级继续此过程
如果升级过程出于某种原因被中断,则可以在过程终止时将其作为增量升级进行恢复。 如果升级过程因错误或网络问题导致失败,则增量升级会很有用。 在增量升级期间,转换器将只升级在前面的会话中未升级的数据。
若要开始增量升级,请按照运行“迁移”命令中的步骤操作。 当“迁移”命令询问你是否要执行增量迁移时,请按 Y。
增量升级的限制
除非遵循以下限制,否则增量升级将不会成功:
在 Visual SourceSafe 数据库中,不得执行销毁、清除、存档或还原活动。
不得更改“迁移”设置文件的 <ProjectMap> 节。
在 Team Foundation Server 上,你不得修改“迁移”设置文件的 <ProjectMap> 节中指定的任何文件夹(或这些文件夹中的任何内容)。