プロジェクトのローカル ファイルが配置されているハード ドライブ上のフォルダーの完全な名前を持っています。ここで、このプロジェクトの最新の対応ファイルを TFS サーバーから取得する必要があります。
私の目的は、両方のバージョンを取得して比較することです (C# を使用)。
Microsoft の TF コマンドライン ツールを使用してこれらのファイルを取得する最良の方法は何ですか?
プロジェクトのローカル ファイルが配置されているハード ドライブ上のフォルダーの完全な名前を持っています。ここで、このプロジェクトの最新の対応ファイルを TFS サーバーから取得する必要があります。
私の目的は、両方のバージョンを取得して比較することです (C# を使用)。
Microsoft の TF コマンドライン ツールを使用してこれらのファイルを取得する最良の方法は何ですか?
あなたがやろうとしていることはtf.exe
、すでにコマンドとして組み込まれている可能性がありますfolderdiff
。これにより、ローカル ソース ツリーとサーバー上の最新バージョンの違いが表示されます。例えば:
tf folderdiff C:\MyTFSWorkspace\ /recursive
この機能は、Visual Studio と Eclipse の両方の TFS クライアントにも存在します。ソース管理エクスプローラーでパスを参照し、「比較対象...」を選択するだけです。
ただし、これがあなたの求めているものではない場合は、 script を試みるのではなくtf.exe
、TFS SDK を使用してサーバーと直接通信することをお勧めします。(作業フォルダーの更新) を使用しget
て最新バージョンにするのは簡単ですが、ファイルを一時的な場所にダウンロードして比較するのは簡単ではありません。tf.exe
TFS SDK の使用は強力であり、非常に簡単です。サーバーに接続して、一時ファイルをかなり簡単にダウンロードできるはずです。このコード スニペットはテストされておらずfolderPath
、サーバー上の最新バージョンと比較するワークスペース マッピングがあることを前提としています。
/* Some temporary directory to download the latest versions to, for comparing. */
String tempDir = @"C:\Temp\TFSLatestVersion";
/* Load the workspace information from the local workspace cache */
WorkspaceInfo workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(folderPath);
/* Connect to the server */
TfsTeamProjectCollection projectCollection = new TfsTeamProjectCollection(WorkspaceInfo.ServerUri);
VersionControlServer vc = projectCollection.GetService<VersionControlServer>();
/* "Realize" the cached workspace - open the workspace based on the cached information */
Workspace workspace = vc.GetWorkspace(workspaceInfo);
/* Get the server path for the corresponding local items */
String folderServerPath = workspace.GetServerItemForLocalItem(folderPath);
/* Query all items that exist under the server path */
ItemSet items = vc.QueryItems(new ItemSpec(folderServerPath, RecursionType.Full),
VersionSpec.Latest,
DeletedState.NonDeleted,
ItemType.Any,
true);
foreach(Item item in items.Items)
{
/* Figure out the item path relative to the folder we're looking at */
String relativePath = item.ServerItem.Substring(folderServerPath.Length);
/* Append the relative path to our folder's local path */
String downloadPath = Path.Combine(folderPath, relativePath);
/* Create the directory if necessary */
String downloadParent = Directory.GetParent(downloadPath).FullName;
if(! Directory.Exists(downloadParent))
{
Directory.CreateDirectory(downloadParent);
}
/* Download the item to the local folder */
item.DownloadFile(downloadPath);
}
/* Launch your compare tool between folderPath and tempDir */