如何使用 TFS 命令行获取更改集中存在的所有文件的名称

How to get name of all the files present in a change set using TFS Command line

我正在尝试编写批处理脚本,通过从 TFS 导出并添加到应用程序服务器来移动网站项目文件。要求是导出/导入更改集中存在的所有文件。

我想使用命令行获取更改集中存在的所有文件名。然后可以使用文件名在这些特定文件上执行 tf get。

我试过了,tf hostory & tf changeset 命令

但在最大值时,tf changeset 命令给出以下输出 -:

Changeset: 151 User: Ashish Chandra Gupta Date: 11 October 2016 11:38:54

Comment: Change 6(ashish)

Items: edit $/SMT/SMT/CNSMT002.aspx.vb

我需要具体的文件名 - CNSMT002.aspx.vb

@echo off
SET tfs=http://YOUR_TFS_SERVER:8080/
:number
ECHO Enter changeset number (0 to exit):
SET /p chg=
IF NOT %chg% GTR 0 GOTO end
"%ProgramFiles%\Microsoft Visual Studio 9.0\Common7\IDE\TF.exe" changeset /server:%tfs% %chg% /noprompt
GOTO number
:end

来源:https://coderwall.com/p/aqypwq/get-a-copy-pasteable-list-of-files-from-a-changeset-in-tfs

您也许可以在 powershell 中执行相同的操作,但我建议您像这样使用 REST TFS Api and JsonConvert

        var collectionUrl = "http://YOURSERVER:8080/tfs/DefaultCollection/";
        var client = new WebClient { UseDefaultCredentials = true };

        var changesetId = 181972;

        string json = client.DownloadString($"{collectionUrl}_apis/tfvc/changesets/{changesetId}/changes?api-version=1.0");
        XDocument document = JsonConvert.DeserializeXNode(json, "changeset");
        var files = document.Descendants("path");
        foreach (var file in files)
        {
            Console.WriteLine(file.Value);
        }

您可能需要根据文件是添加、更改还是删除来进行不同的处理。

JsonConvert可以通过安装NuGet包Newtonsoft.Json获得。如果你想做更细粒度的事情,你可以构建专门的反序列化器,但上面是获取文件名的快速而肮脏的方式。