列出TFS文件夹中所有的内容

5

在TFS中给定一个文件夹路径,我需要递归查找该文件夹内所有文件和文件夹,以获取给定变更集的传递闭包。换句话说,我需要在TFS中为给定的变更集获取路径的传递闭包。我遇到的问题是如何列出TFS中特定文件夹的内容。

在C#中如何实现这一点?

4个回答

7
我假设您想要“某个变更集之后的文件夹内容”,而不是“作为变更集一部分的文件夹内容”。
使用GetItems是正确的方法,只需传递感兴趣的变更集的版本规范即可。 http://msdn.microsoft.com/en-US/library/bb138911.aspx 因此,假设您已经引用了VersionControlServer实例:
var myFolderAtChangeset17 = versionControlServer.GetItems("$/MyFolder", new ChangesetVersionSpec(17), RecursionType.Full);

如果我误解了你的意思,假设你想要“文件夹内容属于变更集X”,有几种不同的方法可以实现,但是使用GetChangeset获取变更集,然后仅过滤Changes是相当简单的。

2

也许这更符合你的需求。它获取变更集中的所有更改并遍历它们,识别给定路径中的更改。这可以使用Linq查询缩短,但我将其略微扩展以传达我的意思:

    TeamFoundationServer tfs = new TeamFoundationServer("http://tfs:8080");
    VersionControlServer vcs = tfs.GetService<VersionControlServer>();

    Changeset cs = vcs.GetChangeset(6284868);

    foreach (Change change in cs.Changes)
    {
        if (change.Item.ServerItem.StartsWith("$/Application Common/Dev/src"))
        {
            System.Diagnostics.Debug.WriteLine(string.Format("Changeset {0}, file {1}, changes {2}",
                cs.ChangesetId, change.Item.ServerItem, change.ChangeType.ToString()));
        }
    }

谢谢。但我不需要特定变更集中的项目。我需要TFS中给定文件夹下的所有文件和文件夹。 - Sidd
1
然后,您可以使用GetItems()... 不过,您的问题确实提到了更改集。 - Robaticus

0

我认为这样做可能会有效...


    TeamFoundationServer tfs = new TeamFoundationServer("http://tfs:8080");   
    VersionControlServer vcs = tfs.GetService();   
    ItemSet items;

    items = vcs.GetItems(tfsPath, RecursionType.Full);

如果您有其他想法,请发布它们。

你的代码缺少定义tfsPath并传递给GetItems的部分。 - Anonymous Type

-1

您可以使用变更集 Web 服务获取包含特定变更集的所有更改项的 XML 文档。然后只需循环遍历更改项列表并查看它们是否在您要查找的路径中。

以下是变更集 Web 服务的 URL:

http://your_tfs_server/VersionControl/Changeset.aspx?artifactMoniker=your_changeset_number&webView=true


我能否只使用 VersionControlServer.getItems() 并循环遍历派生的数组。我现在正在尝试它... - Sidd
被踩了(抱歉 David)。在任何(正常)情况下,您都不应该使用 Web 服务来执行此操作。这些是内部的,并且可能会在没有通知的情况下更改。 - Robaticus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接