【问题标题】:Get all TFS Branches programmatically in C'#在 C'# 中以编程方式获取所有 TFS 分支
【发布时间】:2015-02-18 15:37:20
【问题描述】:

我正在尝试以编程方式获取 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 始终为空。有什么我遗漏的,还是有更好的方法来获取所有分支的列表?

【问题讨论】:

    标签: c# tfs


    【解决方案1】:

    在做了更多研究后,我发现了问题所在。我们的 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();
    

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 感谢您的反馈。问题不在于服务器名称。问题是第一级是包含分支的文件夹。意识到这一点后,我能够解决这个问题。我已经发布了解决方案。
      【解决方案3】:

      你能验证 vcs 对象是否有效吗?你可以执行一些其他操作,例如获取项目? 您确定您的存储库中有分支吗?请注意,“分支对象”是在 tfs 2010 中添加的,它们不等于只是分支操作。在源代码管理资源管理器中,它们有灰色图标,可以使用上下文菜单创建它们

      【讨论】:

        猜你喜欢
        • 2011-06-09
        • 1970-01-01
        • 1970-01-01
        • 2021-11-21
        • 2017-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多