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

时间:2010-07-13 18:44:27

标签: c# tfs tfs-sdk

鉴于tfs中文件夹的特定路径,我需要以递归方式查找给定变更集的文件夹中的所有文件和文件夹。换句话说,我需要在给定的变更集的tfs中获得路径的传递闭包。我这样做的问题是在tfs中列出特定文件夹的内容。 如何在C#中实现这一目标?

4 个答案:

答案 0 :(得分:7)

我假设您想要'变更集X中的文件夹内容',而不是'变更集X'中的'文件夹内容'

GetItems是正确使用的调用,只需传入您感兴趣的变更集的版本规范。

http://msdn.microsoft.com/en-US/library/bb138911.aspx

所以,假设您已经有对VersionControlServer实例的引用:

var myFolderAtChangeset17 = versionControlServer.GetItems("$/MyFolder", new ChangesetVersionSpec(17), RecursionType.Full);

如果我误解了你并且你碰巧想要'变换集X中的文件夹内容',那么有几种不同的方法可以做到这一点,但是使用GetChangeset获取变更集并只过滤{{3}很简单。

答案 1 :(得分: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()));
        }
    }

答案 2 :(得分:0)

我觉得这样的事情会起作用..


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

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

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

答案 3 :(得分:-1)

您可以使用changeset webservice获取包含特定变更集的所有已更改项的XML文档。然后循环浏览已更改项目列表,看看它们是否在您正在寻找的路径中。

以下是changeset webservice的URL:

的http:// your_tfs_server {/VersionControl/Changeset.aspx?artifactMoniker= {1}}&安培; web视图=真