给定 tfs 中的特定文件夹路径,我需要递归查找文件夹中给定变更集的所有文件和文件夹。换句话说,对于给定的变更集,我需要在 tfs 中获得路径的传递闭包。我这样做时面临的问题是列出 tfs 中特定文件夹的内容。这在 C# 中怎么可能?
4 回答
我假设您想要“变更集 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获取变更集并仅过滤更改非常简单。
像这样的东西可能更符合您的要求。这将获取变更集中的所有更改并遍历它们,识别给定路径中的更改。这可以通过 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()));
}
}
我认为这样的事情会起作用..
TeamFoundationServer tfs = new TeamFoundationServer("http://tfs:8080");
VersionControlServer vcs = tfs.GetService();
ItemSet items;
items = vcs.GetItems(tfsPath, RecursionType.Full);
如果您有任何其他想法,请发布它们..
您可以使用变更集 Web 服务来获取包含特定变更集的所有已更改项的 XML 文档。然后只需遍历已更改项目的列表,看看它们是否在您要查找的路径中。
这是变更集网络服务的 URL:
http: your_tfs_server
///VersionControl/Changeset.aspx?artifactMoniker your_changeset_number
= &webView=true