如何以编程方式获取TFS工作区中本地已映射的分支列表
获取TFS特定工作区中已映射的分支列表
要筛选出已映射到指定工作区的分支,你可以利用Workspace类的GetMappings()方法获取工作区的所有有效映射,再结合TFS SDK提供的路径工具类来判断分支是否被映射覆盖。以下是具体实现方案:
步骤说明
- 获取工作区的有效映射:先从你的
Workspace实例中取出所有非Cloaked(即实际映射到本地)的服务器路径。 - 遍历分支并判断映射状态:对每个分支的根路径,检查它是否是某个工作区映射路径的子路径(或完全匹配),以此确定该分支是否已映射到本地。
完整代码示例
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
相关产品推荐
相关产品推荐

