TFVC から Git へのリポジトリのインポートと移行

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

同じ組織内の既存の TFVC リポジトリから新しい Git リポジトリにコードを移行できます。 Git への移行は、大規模な TFVC リポジトリとチームにとって複雑なプロセスです。 TFVC などの一元化されたバージョン コントロール システムは、基本的な点で Git とは動作が異なります。 スイッチには、新しいコマンドを学習する以外に多くの作業が必要です。 これは、慎重な計画を必要とする破壊的変更です。 次のことを考慮する必要があります。

  • ツールとプロセスの改訂
  • バイナリと実行可能ファイルの削除
  • チームのトレーニング

移行を開始する前に、「Git に一元化されたバージョン管理」と次の「TFVC から Git への移行」セクションを読むことを強くお勧めします。

インポート エクスペリエンスは、小規模で単純な TFVC リポジトリに最適です。 また、Git への一元化されたバージョン管理と、次の「TFVC から Git への移行」セクションで説明されているように、既に「クリーンアップ」されているリポジトリにも適しています。 これらのセクションでは、より高度な TFVC リポジトリ構成のための他のツールもお勧めします。

重要

TFVC と Git ではバージョン コントロール履歴を保存する方法が異なるため、履歴を移行しないことをお勧めします。 これは、Windows や他の製品を一元管理されたバージョン管理から Git に移行したときに Microsoft が採用したアプローチです。

リポジトリのインポート

  1. [リポジトリ][ファイル] を選択します。

    ブランチの表示

  2. リポジトリのドロップダウンから、[リポジトリのインポート] を選びます。

    リポジトリのインポート オプション

  3. [ソースの種類] ドロップダウンから [TFVC] を選択します

  4. Git リポジトリにインポートするリポジトリ/ブランチ/フォルダーへのパスを入力します。 たとえば、$/Fabrikam/FabrikamWebsite のように指定します。

  5. TFVC リポジトリから履歴を移行する場合は、[履歴の移行] をクリックし、日数を選択します。 最新の変更セットから最大 180 日間の履歴を移行できます。 TFVC リポジトリへのリンクは、Git に移行される 1 番目の変更セットのコミット メッセージに追加されます。 これにより、必要なときに古い履歴を簡単に見つけることができます。

  6. 新しい Git リポジトリに名前を付け、[インポート] をクリックします。 インポートのサイズによっては、Git リポジトリの準備は数分で完了します。

    [リポジトリのインポート] ダイアログ

トラブルシューティング

このエクスペリエンスは、小規模で単純な TFVC リポジトリ、または移行用に準備されたリポジトリ向けに最適化されています。 これは、いくつかの制限があることを意味します。

  1. ルートまたはブランチの内容のみを移行します。 たとえば、$/Fabrikam に TFVC プロジェクトがあり、その下に 1 つのブランチと 1 つのフォルダーがある場合、$/Fabrikam をインポートするパスはフォルダーをインポートするのに対し、$/Fabrikam/<branch> はブランチのみをインポートします。
  2. インポートされたリポジトリと関連する履歴 (インポートされている場合) のサイズは 1 GB を超えることはできません。
  3. 最大 180 日間の履歴をインポートできます。

上記のいずれかがインポートのブロッカーである場合は、ホワイトペーパー「Git に一元化されたバージョン管理」と、次の 「TFVC から Git への移行」セクションをインポートして読むのに Git-TFS などの外部ツールを試すことをお勧めします。

重要

Microsoft 製品、サービス、プラットフォームでの Git-TFS などの外部ツールは、すべてユーザーの責任でご使用ください。 Microsoft は、このようなサード パーティの拡張機能の機能、信頼性、またはセキュリティの承認、サポート、または保証はしません。

TFVC から Git への移行

一元的なバージョン管理システムから Git にソース コードを移行する前に、それら 2 つの違いを理解し、移行の準備を行ないます

要件

移行を容易にするために、この記事の前のセクションで説明した「リポジトリのインポート手順」に従う前に、いくつかの要件があります。

  • 単一のブランチのみを移行します。 移行を計画するときは、Git の新しい分岐戦略を選択します。 メイン ブランチのみを移行すると、GitFlowGitHub Flow などのトピック ブランチ ベースのワークフローがサポートされます。
  • 最新バージョンのソース コードのみをインポートするなど、ヒントの移行を実行します。 TFVC の履歴が単純な場合は、一部の履歴 (最大 180 日) を移行して、チームが Git のみで作業できるようにするオプションがあります。 詳細については、「Git への移行を計画する」を参照してください。
  • 画像、科学データセット、ゲームモデルなどのバイナリアセットをリポジトリから除外します。 これらのアセットは、インポート ツールでは構成されない Git LFS (Large File Storage) 拡張機能を使用する必要があります。
  • インポートされたリポジトリのサイズは 1GB 未満に保ちます。

リポジトリがこれらの要件を満たしていない場合は、代わりにGit-TFS ツールを使用して移行を実行してください。

重要

Microsoft 製品、サービス、プラットフォームでの Git-TFS などの外部ツールは、すべてユーザーの責任でご使用ください。 Microsoft は、このようなサード パーティの拡張機能の機能、信頼性、またはセキュリティの承認、サポート、または保証はしません。

移行手順

TFVC から移行するプロセスは通常、簡単です。

  1. ローカル ディスク上の TFVC からブランチの最新バージョンをチェックしてください
  2. リポジトリからバイナリとビルド ツールを削除し、NuGet などのパッケージ管理システムをセットアップします。
  3. バージョン管理システム固有の構成ディレクティブを変換します。 たとえば、.tfignore ファイルを .gitignore に変換し、.tpattributesファイルを .gitattributes に変換します。
  4. 変更をチェックインして Git への移行を実行します。

ステップ 1 ~ 3 はオプションです。 リポジトリにバイナリがなく、.gitignore または .gitattributes を設定する必要がない場合は、変更をチェックインして移行を実行する 手順に直接進むことができます。

最新バージョンをチェックしてください

新しい TFS ワークスペースを作成し、Git に移行するサーバー ディレクトリの作業フォルダーをマップします。 これには、完全な作業フォルダーのマッピングは必要ありません。 リポジトリから削除するバイナリを含むフォルダーと、.tfignore のようなバージョン管理システム固有の構成ファイルを含むフォルダーのみをマップします。

マッピングが設定されたら、フォルダーをローカルに取得します。

tf get /version:T /recursive

バイナリとビルドツールを削除する

Git は、履歴内のすべてのファイルのコピーをすべての開発者に提供することで、変更されたファイルの履歴を保存する方法のため、バイナリ ファイルをリポジトリに直接チェックインすると、リポジトリが急速に増大し、パフォーマンスの問題が発生する可能性があります。

ビルド ツールやライブラリなどの依存関係については、NuGet などのバージョン管理をサポートするパッケージング ソリューションを採用します。 多くのオープン ソース ツールとライブラリは、NuGet ギャラリー ですでに利用可能ですが、独自の依存関係については、新しい NuGet パッケージを作成してください。

依存関係を NuGet に移動したら、依存関係を .gitignore に追加して、Git リポジトリに含まれていないことを確認します。

バージョン管理固有の構成を変換する

Team Foundation バージョン コントロールは、特定のファイルが TFVC リポジトリに追加されないようにする .tfignore ファイルを提供します。 ビルド出力などの自動生成ファイルに .tfignore ファイルを使用すると、ファイルが誤ってチェックインされないようにすることができます。

プロジェクトがこの動作に依存している場合は、.tfignore ファイルを .gitignore ファイルに変換します。

クロスプラットフォームの TFVC クライアントは、ファイルをローカル ディスクに配置する方法、またはリポジトリにチェックインする方法を制御する .tpattributes ファイルのサポートも提供します。 .tpattributesファイルを使用している場合は、.gitattributes ファイルに変換します。

変更をチェックインして移行を実行する

バイナリの削除、パッケージ管理への移行、またはバージョン管理固有の構成の変換を行う変更をチェックインします。 TFVC でこの最終変更を行ったら、インポートを実行できるようになります。

リポジトリのインポート手順に従ってインポートを実行します。

高度な移行

Git-TFS ツール は、Team Foundation バージョン コントロールと Git の間の双方向のブリッジであり、これを使用して移行を実行できます。 Git-TFS は、インポート ツールがサポートする 180 日を超える完全な履歴を含む移行に適しています。 または、Git-TFS を使用して、複数のブランチとマージ関係を含む移行を試みることもできます。

Git-TFS で移行を試みる前に、TFVC と Git の履歴の保存方法には基本的な違いがあることに注意してください。

  • Git は履歴をリポジトリの特定の時点のスナップショットとして保存しますが、TFVC はファイルに対して発生した個別の操作を記録します。 名前の変更、削除の取り消し、ロールバックなどの TFVC の変更タイプは、Git では表現できません。 ファイル A がファイル B に名前変更されたことを確認するのではなく、ファイル A が削除され、同じコミットでファイル B が追加されたことだけを追跡します。
  • Git には、TFVC ラベルに直接相当するものはありません。 ラベルには、特定のバージョンのファイルをいくつでも含めることができ、さまざまなバージョンのファイルを反映できます。 概念的には似ていますが、Git タグは、ある時点でのリポジトリ全体のスナップショットを指します。 プロジェクトが、何が配信されたかを知るために TFVC ラベルに依存している場合、Git タグはこの情報を提供しない可能性があります。
  • TFVC でのマージは、リポジトリ全体ではなく、ファイル レベルで発生します。 あるブランチから別のブランチにマージできるのは、変更されたファイルのサブセットのみです。 残りの変更されたファイルは、後続の変更セットにマージされる場合があります。 Git では、マージはリポジトリ全体に影響し、両方の個別の変更セットはマージとして認識されません。

これらの違いのため、履歴を表示するには、ヒントの移行を実行し、TFVC リポジトリをオンラインで読み取り専用に保つことをお勧めします。

Git-TFS を使用して高度な移行を試みるには、履歴を使用して単一のブランチを複製する または マージ履歴を使用してすべてのブランチを複製するを参照してください。

重要

Microsoft 製品、サービス、プラットフォームでの Git-TFS などの外部ツールは、すべてユーザーの責任でご使用ください。 Microsoft は、このようなサード パーティの拡張機能の機能、信頼性、またはセキュリティの承認、サポート、または保証はしません。

ワークフローを更新する

一元化されたバージョン コントロール システムから Git への移行は、単なるコードの移行だけではありません。 チームは、Git が既存のバージョン管理システムとどのように違うのか、そしてそれらの違いが日常業務にどのような影響を与えるのかを理解するためのトレーニングが必要です。

集中バージョン管理から Git に移行する方法の詳細をご覧ください。