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

时间:2015-02-17 08:57:17

标签: c# tfs

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

Displaying all branch hierarchies in 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<VersionControlServer>();

        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始终为空。是否有我遗漏的东西,或者有更好的方法来获取所有分支的列表?

3 个答案:

答案 0 :(得分:2)

在做了一些研究后,我发现了问题。我们的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)。

答案 1 :(得分:0)

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

如果您有合理的标准设置,则您的serverName变量格式应为:http://ServerName:Port/tfs/CollectionName,例如:http://tfsServer01:8080/tfs/MyCollection

答案 2 :(得分:0)

您可以验证vcs对象是否有效?你可以进行其他一些操作,例如getitems? 您确定在存储库中有分支吗?请注意&#34;分支项目&#34;在tfs 2010中添加它们并不等于分支操作。在源代码管理资源管理器中,它们具有灰色图标,可以使用上下文菜单

创建