VSSUpgrade コマンド プロンプト ツールを使用した Visual SourceSafe からのアップグレード

ほとんどの場合、Visual SourceSafe のデータをアップグレードするには、VssUpgrade コマンド プロンプト ツールではなく、VSS アップグレード ウィザードを使用する必要があります。 ただし、状況によっては、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 プロジェクトを 1 つのチーム プロジェクトに移行する。

  • ユーザー データの変換方法を指定する (たとえば、Visual SourceSafe の Kim を TFS の EUROPE\KimT に変換する)。

  • Visual SourceSafe のデータ内のラベルを無視する。

  • ネットワーク エラーなどが原因で、大量のデータのアップグレード中に中断されたプロセスを再開する。

これらの機能のいずれも必要としない場合、またはデータをアップグレードして Visual Studio Online のチーム プロジェクトに移植する必要がある場合は、VssUpgrade ではなく VSS アップグレード ウィザードを使用してください。

データの分析

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> 要素

<SQL> 要素を分析用の設定ファイルの <Source> セクションに追加して、一時データを格納するための VssUpgrade 用データベースを指定する必要があります。 この要素は <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>

分析コマンドの実行

  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.txt および VSSUpgrade.log で詳細を参照できます。

分析コマンドは以下を生成します。

  • 移行コマンドで発生する可能性のある問題と変更に関する詳細を参照できるレポート。

  • アップグレード プロセス中のユーザー データの変換方法を指定できるユーザー マップ ファイル (Usermap.xml)。

これらのファイルの詳細については、次の説明を参照してください。

分析コマンドによって検出された懸案事項のレビューと解決

分析レポートには、アップグレード時に問題を招く可能性のある Visual SourceSafe データベース内の懸案事項に関する情報が示されます。 次のセクションで説明するアップグレード時の問題を最小限にとどめるには、できる限り多くの懸案事項を解決しておくことが重要です。

一部のファイルがチェックアウトされている

分析レポートには、現在チェックアウトされているファイルが表示されます。 アップグレード プロセスでは、チェックアウト情報は保存されません。 アップグレードする前に、できる限り多くのファイルがチェックインされるようにしてください。

一部の項目にデータ整合性の懸案事項がある

分析レポートには、データの整合性が損なわれている項目が示されます。 Visual SourceSafe ANALYZE ユーティリティを使用すると、この種の懸案事項を解決できる可能性があります。 修復できない項目はアップグレードされません。詳細については、Microsoft Web サイトの「ANALYZE ユーティリティ」および「How to Detect and Fix Database Corruption Errors in Visual SourceSafe (Visual SourceSafe データベース破損エラーを検出して修正する方法)」を参照してください。

<ProjectMap> セクションにない履歴がマップ済みプロジェクト内の一部のフォルダーに含まれている

Visual SourceSafe データベース内のプロジェクト間でフォルダーを移動した場合、そのフォルダーの履歴は元のプロジェクトと現在のプロジェクトの両方に格納されます。 これらのフォルダーをそのすべての履歴と共にアップグレードするには、元のプロジェクトと現在のプロジェクトの両方をアップグレードする必要があります。

たとえば、Visual SourceSafe のプロジェクトである Project2 をアップグレードするとします。 このプロジェクトには、その履歴のある時点で Project1 から移動された $/Project2/FeatureA というフォルダーが含まれています。

<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 バージョン管理によってサポートされていない

分析レポートには、TFS バージョン コントロールによってサポートされていない文字が含まれているためにアップグレード時に変更されるラベル名が示されます。 「Team Foundation の名前付けの制限事項」を参照してください。

データのアップグレード

分析コマンドを実行したら、データをアップグレードする準備はほぼ完了です。 移行コマンドを実行する前に、設定ファイルを作成しておく必要があります。 必要に応じて、ユーザー名のアップグレード方法を指定することもできます。

ユーザー名のアップグレード方法の指定

ユーザー情報を Visual Source Safe から TFS バージョン コントロールにどのようにアップグレードするかを制御できます。 具体的には、移行コマンドを使用してどのユーザー名を TFS バージョン コントロール内の各項目の履歴の変更セットと関連付けるかを指定できます。 これを行うには、分析コマンドを実行したときに作成されたユーザー マップ ファイルを、このトピックで前述したように編集します。

ユーザー マップ ファイルは省略可能です。 <UserMap name> 属性を分析用の設定ファイルから省略した場合、各変更セットは次のように構築されます。

  • User フィールドは、VssUpgrade の実行に使用しているアカウントの名前に設定されます。

  • Visual SourceSafe データベースでアクションを実行したユーザーの名前は Comment フィールドに格納されます。

ユーザー マップ ファイルの例

分析コマンドを実行すると、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> 属性を指定しない場合、各変更セットは次のように構築されます。

  • User フィールドは、VssUpgrade の実行に使用したアカウントの名前に設定されます。

  • Visual SourceSafe データベースでアクションを実行したユーザーの名前は Comment フィールドに格納されます。

  • <UserMap To> 属性を指定しており、その値が Team Foundation Server 上の有効なユーザーである場合、User フィールドはそのアカウントの名前に設定されます。 その値が 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 属性を使用して、Source 属性で指定されている Visual SourceSafe データベース内のプロジェクトの内容をアップグレードする Team Foundation Server 上の場所のパスを指定します。

たとえば、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 データベースに多数のファイルに適用される多数のラベルが含まれている場合は、アップグレード プロセスが長引く可能性があります。 このデータがチームに不要な場合は、<Label migrate="false" /> タグを <Settings> セクションに追加することによって、ラベルを無視するように VssUpgrade を設定できます。

<Output file> 属性

<Settings> セクションでは、<Output file> 属性を使用して、アップグレード レポートを書き込むパスとファイルを指定できます。 この属性を指定しないと、コンバーターによって VSSMigrationReport.xml という名前のファイルにレポートが書き込まれ、現在のディレクトリに配置されます。

Migrate コマンドの実行

  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.txt および VSSUpgrade.log で詳細を参照できます。

移行コマンドを実行するとレポートが生成され、移行コマンドで発生する可能性のある問題と変更に関する詳細を確認することができます。 「Visual SourceSafe からアップグレードした後の手順の実行」を参照してください。

段階的なアップグレードを使用したプロセスの再開

アップグレード プロセスがなんらかの理由で中断した場合は、終了した時点から段階的なアップグレードとしてプロセスを再開できます。 段階的なアップグレードは、エラーまたはネットワークの問題が原因でアップグレード プロセスが失敗した場合に役立ちます。 段階的なアップグレードでは、前のセッションでアップグレードされなかったデータだけがコンバーターによってアップグレードされます。

段階的なアップグレードを開始するには、「移行コマンドの実行」の手順に従います。 段階的な移行の実行を確認するプロンプトが表示されたら、Y キーを押します。

段階的なアップグレードに関する制限事項

次の制限事項に従わないと、段階的なアップグレードは成功しません。

  • Visual SourceSafe データベースで、破棄、削除、アーカイブ、または復元の動作を実行していないことが必要です。

  • 移行用の設定ファイルの <ProjectMap> セクションを変更しないでください。

  • Team Foundation Server サーバー上では、移行用の設定ファイルの <ProjectMap> セクションで指定されているフォルダー (またはフォルダーの内容) を変更しないでください。

次の手順

結果を表示して確認し、必要に応じて懸案事項を解決します。