Api 查找合并分支的tfs路径

Api 查找合并分支的tfs路径,api,tfs,merge,branch,tfs-sdk,Api,Tfs,Merge,Branch,Tfs Sdk,使用TFS,我有了trunk$/project/trunk和一个分支$/project/dev/feature/new\u one 我已将我的分支合并回主干,如下所示: C33($/project/trunk) | \ | \ | C32($/project/dev/feature/new_one) | | | | | | ... 我使用TFSAPI,可以找到合并变更集C33。使用方法QueryMerges(),我能够找到包含文件所有更改的父变更集C32,但

使用TFS,我有了trunk
$/project/trunk
和一个分支
$/project/dev/feature/new\u one

我已将我的分支合并回主干,如下所示:

C33($/project/trunk)
|  \
|   \
|    C32($/project/dev/feature/new_one)
|     |
|     |
|     |
...
我使用TFSAPI,可以找到合并变更集C33。使用方法
QueryMerges()
,我能够找到包含文件所有更改的父变更集C32,但不能找到我需要的信息:(

是否有方法使用TFS API查找合并分支的存储库路径
$/project/dev/feature/new\u one

使用变更集C32,我只能获取修改文件的路径,如
$/project/dev/feature/new\u one/path/to/file.txt
,但我无法从文件的完整路径提取分支路径:(

PS:自TFS2008起运行的解决方案将是最好的,但如果它仅在2010年起运行,它应该是好的


PS2:解决这个问题将有助于管理我开发的git tfs中的合并变更集…

不幸的是,没有API方法来获取给定项路径的分支,您可能认为这是一个相当常见的用例

TFS 2010及以后版本中,您可以使用来查询版本控制中的所有分支。使用
RecursionType.Full
作为此方法的参数,您将获得一个
BranchObject
数组,其中包含没有父级及其所有子级的所有分支。然后,您可以按如下方式确定给定文件路径的分支:

C33($/project/trunk)
|  \
|   \
|    C32($/project/dev/feature/new_one)
|     |
|     |
|     |
...
var collection=new-tfstreamprojectcollection(新Uri(“http://tfsuri"));
var versionControl=collection.GetService();
var branchObjects=versionControl.QueryRootBranchObjects(RecursionType.Full);
var mergeFilePath=“$/project/dev/feature/new\u one/path/to/file.txt”;
var branch=branchObjects.SingleOrDefault(b=>{
var branchPath=b.Properties.RootItem.Item;
返回mergeFilePath.StartsWith(branchPath.EndsWith(“/”)?branchPath:branchPath+“/”);
});
Console.WriteLine(branch.Properties.RootItem.Item);
如图所示,分支的路径位于
branchbject.Properties.RootItem.Item
。我相信只需检查合并文件的路径中包含哪个分支的路径,就可以在数组中找到相关的
branchbject
(由于TFS强制在给定文件夹层次结构中只能存在一个分支,因此最多只能匹配一个分支)

请注意,在TFS 2012中使用
QueryRootBranchObjects
时,我被连接问题烧坏了。原因是一些假分支在分支名称中有撇号


解决方法是使用,但是这需要一个项目标识符,它是分支的精确路径。显然,此时您不知道分支路径,因为您只有一个文件路径,因此每次都必须递归调用文件路径的目录
QueryBranchObjects
,直到找到匹配项为止。

此解决方案是我的备用分支,但我不喜欢它,原因有二:1.如果父分支不是分支,但仍然是tfs中的文件夹,则可以使用QueryRotBranchObjects()获取它如果您有多个名为dev、dev/test、dev/test2、dev/test3的分支,并且在源代码中有一个文件夹“test”,那么可以发现好的父分支是“dev”,实际上是“dev/test”。您不能100%确定:(即使是罕见的情况……我已经做了一个编辑。2.很容易解决,而且不可能有一个分支
$/dev
,然后在它下面的
$/dev/test
处有另一个分支。TFS在分支步骤中不允许这样做。