昨日誰かが私のところに来て、同じ質問をしました。幸いなことに、彼らはTFSプロジェクトデータベース(tfs_)のバックアップを持っていたので、それを別のデータベースに復元し、私はそれを調べて理解しました(バックアップがある場合は、はい、すべてのファイルを復元できます)。
最初に、データベース内のテーブルに関する情報を少し説明します。
シェルフセットは、tbl_Workspace テーブルにクエリを実行し、Type=1 (シェルフセット) のすべてのレコードを検索することで識別できます。もちろん、WorkspaceName 列を使用して名前でフィルター処理することもできます。
関心のある他のテーブルは次のとおりです。
tbl_PendingChanges (tbl_Workspace から WorkspaceId を参照) - ShelveSet の一部であるファイル
tbl_VersionedItem (ItemId 列を介して tbl_PendingChanges にリンク) - ファイルの親パスと名前
tbl_Content (FileId を介して PendingChanges にリンク) - これは、ファイルの内容が圧縮 (gzip) データとして保存される場所です。
解決策は次のとおりです。次のクエリでファイルを表示できます。
SELECT c.[CreationDate], c.[Content], vi.[ChildItem], vi.ParentPath
FROM [dbo].[tbl_Content] c
INNER JOIN [dbo].[tbl_PendingChange] pc ON pc.FileId = c.FileId
INNER JOIN [dbo].[tbl_Workspace] w ON w.WorkspaceId = pc.WorkspaceId
INNER JOIN [dbo].[tbl_VersionedItem] vi ON vi.ItemId = pc.ItemId
WHERE w.WorkspaceName = '<YOUR SHELVESET NAME>'
そこで、SQL からデータを取得し、GZipStream クラスを使用してコンテンツを解凍し、ファイルをディスクに保存するコードをいくつか書きました。
1 週間ほどの作業が 1 時間ほどで完了しました。
これは TFS 2010 で行われました。
お役に立てれば!