以C’编程方式获取所有TFS分支#

我正在尝试以编程方式获取Visual Studio 2013中TFS中所有分支的列表。在做了一些研究后,我发现这个博客详细说明了如何获取分支:

在TFS 2010中显示所有分支层次结构

我修改了代码,而不是将所有内容存储在列表中。

private void Setup() { string serverName = "serverName"; //in the code this is set to the actual server name TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri(serverName)); VersionControlServer vcs = tfs.GetService(); var bos = vcs.QueryRootBranchObjects(RecursionType.OneLevel); Array.ForEach(bos, (bo) => DisplayAllBranches(bo, vcs)); } private void DisplayAllBranches(BranchObject bo, VersionControlServer vcs) { _listOfBranches.Add(bo.Properties.RootItem.Item); var childBos = vcs.QueryBranchObjects(bo.Properties.RootItem, RecursionType.OneLevel); foreach (var child in childBos) { if (child.Properties.RootItem.Item == bo.Properties.RootItem.Item) continue; DisplayAllBranches(child, vcs); } } 

我遇到的问题是BranchObjects [] bos总是空的。 有什么我缺少或有更好的方法来获得所有分支的列表?

在做了一些研究后,我发现了问题。 我们的TFS结构类似于以下内容:

 $/Root $/Root/Folder $/Root/Folder/Branch 

第一级下来不会返回任何分支,因为没有任何分支。 所以相反,我使用了一种更简单的方法来获取所有的分支。

 var branchObjects = vcs.QueryRootBranchObjects(RecursionType.Full); foreach (var branch in branchObjects) { var branchName = branch.Properties.RootItem.Item; var parentFolder = branchName.Substring(0, branchName.LastIndexOf('/')); if (!_listOfBranches.Contains(parentFolder)) { _listOfBranches.Add(parentFolder); } _listOfBranches.Add(branchName); } _listOfBranches.Sort(); 

这不是目前最干净的方法。 但它能够检索指定项目的所有分支,以及父文件夹(目前不包括Root)。

该代码应该工作正常(适合我)。 我怀疑你的服务器名称变量中缺少你的集合名称?

如果你有一个合理的标准设置,你的serverName变量格式应该是: http://ServerName:Port/tfs/CollectionName所以例如: http://tfsServer01:8080/tfs/MyCollection

你能validationvcs对象是否有效? 你能执行其他一些操作吗,比如getitems? 您确定您的存储库中有分支吗? 请注意,在tfs 2010中添加了“branch ocjects”,它们不仅仅是分支操作。 在源代码管理资源管理器中,它们具有灰色图标,可以使用上下文菜单创建它们