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