如何从代码中处理 tfs 文件?

How to work with tfs files from code?

我有一个桌面应用程序可以修改一些 xml 受源代码管理的文件。该程序应该能够获取文件、修改它们并进行签入。我已经知道如何使用 tf;但是,我不知道如何使用代码 运行 visual studio 的开发人员命令提示符。此外,该程序将安装在没有 visual studio 的计算机上;因此,他们不会在任何地方使用 tf 命令。考虑到所有这些,运行 以下命令的最佳方式是什么?

mkdir C:\Temp\PROGRAM
cd C:\Temp\PROGRAM && tf workspace /new /noprompt PROGRAM /collection:"http://myserver:8080/tfs/mycollection"
cd C:\Temp\PROGRAM && tf workfold /map $/my/server/route/to/map C:\Temp\PROGRAM
cd C:\Temp\PROGRAM && tf get

我知道有一些库可以与 tfvc 一起使用,但我没有使用过它们,而且看起来不像 运行 命令那样清晰。任何设法与上述命令执行相同操作的解决方案都将受到欢迎。

  1. 创建工作区
  2. 将文件夹从服务器映射到本地文件夹
  3. 下载(签出)该文件夹中的所有文件(不需要递归)

如果可能,在解决方案中包括:

  1. 签入文件已更改

编辑

我最终使用的代码是这个

static void Load(string local, string server, Uri urlCollection)
{
    Directory.CreateDirectory(local);
    Workspace workspace = GetWorkspace(urlCollection, "MyWorkspaceName");
    workspace.Map(server, local);
    workspace.Get();
}
static Workspace GetWorkspace(Uri urlCollection, string name)
{
    VersionControlServer vcs = new TfsTeamProjectCollection(urlCollection)
        .GetService<VersionControlServer>();
    try
    { return vcs.GetWorkspace(name, vcs.AuthorizedUser))}
    catch(Exception)
    { return vcs.CreateWorkspace(name, vcs.AuthorizedUser)); }
}

您可以在计算机上安装 Team Explorer Everywhere,它使您能够在没有 Visual Studio.

的情况下使用 TFS 命令行("tf" 命令)

根据您的描述,您希望从 TFS 服务器下载文件,然后以编程方式签入更改的文件。

您可以使用 TFS 客户端 API 来实现此目的。建议您浏览 Buck Hodges 的博客,其中展示了如何创建工作区、挂起更改、签入这些更改。

请参考Team Foundation Version Control client API example for TFS 2010 and newer

关于如何从TFS获取文件,门户网站中也有多个示例,建议您使用VersionControlServer.GetItem方法

用法示例:

// Get the latest Item for local path "C:\projects\myfiles.cs"
Item item1 = versionControlServer.GetItem("C:\projects\myfiles.cs");

// Get ItemId = 12345 for changesetId = 54321
Item item2 = versionControlServer.GetItem(12345,54321);

// Get the latest Item for server path "$/ProjectName/myfile.cs"
Item item1 = versionControlServer.GetItem("$/ProjectName/myfile.cs", VersionSpec.Latest);

您也可以select一个历史版本的源码下载,完整代码请参考以下教程: Team Foundation Server API: Programmatically Downloading Files从 源代码管理

另一种方法是使用 powershell 脚本来处理这个问题,请看这里:Download files from TFS server with PowerShell