5

给定 tfs 中的特定文件夹路径,我需要递归查找文件夹中给定变更集的所有文件和文件夹。换句话说,对于给定的变更集,我需要在 tfs 中获得路径的传递闭包。我这样做时面临的问题是列出 tfs 中特定文件夹的内容。这在 C# 中怎么可能?

4

4 回答 4

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获取变更集并仅过滤更改非常简单。

于 2010-07-14T07:59:39.483 回答
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()));
        }
    }
于 2010-07-13T19:35:19.310 回答
0

我认为这样的事情会起作用..


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

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

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

于 2010-07-13T19:47:18.503 回答
-1

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

这是变更集网络服务的 URL:

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

于 2010-07-13T18:48:55.457 回答