You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以编程方式获取TFS工作区中本地已映射的分支列表

获取TFS特定工作区中已映射的分支列表

要筛选出已映射到指定工作区的分支,你可以利用Workspace类的GetMappings()方法获取工作区的所有有效映射,再结合TFS SDK提供的路径工具类来判断分支是否被映射覆盖。以下是具体实现方案:

步骤说明

  1. 获取工作区的有效映射:先从你的Workspace实例中取出所有非Cloaked(即实际映射到本地)的服务器路径。
  2. 遍历分支并判断映射状态:对每个分支的根路径,检查它是否是某个工作区映射路径的子路径(或完全匹配),以此确定该分支是否已映射到本地。

完整代码示例

using Microsoft.TeamFoundation.VersionControl.Client;

// 假设你已持有VersionControlServer实例m_VersionControlServer和目标Workspace实例workspace
var branchObjects = m_VersionControlServer.QueryRootBranchObjects(RecursionType.Full);
List<string> mappedBranches = new List<string>();

// 获取工作区中所有实际映射的服务器路径(排除Cloaked的路径)
var activeMappings = workspace.GetMappings()
                              .Where(wf => wf.WorkingFolderType == WorkingFolderType.Map)
                              .ToList();

foreach (var branch in branchObjects)
{
    string branchRootPath = branch.Properties.RootItem.Item;
    
    // 判断分支根路径是否被工作区映射覆盖
    bool isBranchMapped = activeMappings.Any(mapping => 
        // 分支路径是映射路径的子项,或与映射路径完全一致
        VersionControlPath.IsDescendant(branchRootPath, mapping.ServerItem)
        || VersionControlPath.Equals(branchRootPath, mapping.ServerItem));
    
    if (isBranchMapped)
    {
        mappedBranches.Add(branchRootPath);
    }
}

关键细节解释

  • Workspace.GetMappings():返回工作区的所有映射条目,包含服务器路径和对应的本地路径,我们通过WorkingFolderType.Map过滤掉Cloaked(隐藏)的映射,只保留实际同步到本地的路径。
  • VersionControlPath工具类:TFS SDK提供的专门用于处理版本控制路径的类,其中:
    • IsDescendant(childPath, parentPath):判断子路径是否是父路径的后代(部分版本已包含直接匹配的情况,加上Equals可让逻辑更明确)。
    • Equals(path1, path2):安全比较两个TFS路径,避免因大小写或路径分隔符差异导致的误判。

如果你的需求是仅筛选根路径直接被映射的分支(不包含子分支),只需将判断条件改为直接匹配即可:

bool isBranchMapped = activeMappings.Any(mapping => 
    VersionControlPath.Equals(branchRootPath, mapping.ServerItem));

内容的提问来源于stack exchange,提问作者Baflora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 15:17:28