我试图以编程方式获取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始终为空。是否有我遗漏的东西,或者有更好的方法来获取所有分支的列表?
答案 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中添加它们并不等于分支操作。在源代码管理资源管理器中,它们具有灰色图标,可以使用上下文菜单
创建