我的硬盘上有文件夹的全名,项目的本地文件位于该文件夹中。现在我需要从TFS服务器获取该项目的最新相应文件。
我的目标是检索两个版本并进行比较(使用C#)。
通过Microsoft的TF命令行工具获取这些文件的最佳方法是什么?
答案 0 :(得分:4)
您尝试执行的操作可能已作为tf.exe
命令内置于folderdiff
。这将显示本地源树与服务器上的最新版本之间的差异。例如:
tf folderdiff C:\MyTFSWorkspace\ /recursive
此功能也存在于Visual Studio和Eclipse中的TFS客户端中。只需浏览到源代码管理资源管理器中的路径,然后选择“与......比较”,这就是为什么在
之外有用的原因。如果这不是您所追求的,我建议不尝试编写脚本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 */