gpt4 book ai didi

api - 找到合并分支的tfs路径

转载 作者:行者123 更新时间:2023-12-03 21:26:41 27 4
gpt4 key购买 nike

使用 TFS,我有主干 $/project/trunk和一个分支$/project/dev/feature/new_one .

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

C33($/project/trunk)
| \
| \
| C32($/project/dev/feature/new_one)
| |
| |
| |
...

我使用 TFS API,可以找到合并变更集 C33。用方法 QueryMerges() ,我能够找到包含所有文件更改的父变更集 C32,但找不到我需要的信息:(

有没有办法,使用TFS API,找到分支合并的存储库路径$/project/dev/feature/new_one ?

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

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

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

最佳答案

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

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

var collection = new TfsTeamProjectCollection(new Uri("http://tfsuri"));
var versionControl = collection.GetService<VersionControlServer>();

var branchObjects = versionControl.QueryRootBranchObjects(RecursionType.Full);

var mergeFilePath = "$/project/dev/feature/new_one/path/to/file.txt";
var branch = branchObjects.SingleOrDefault(b => {
var branchPath = b.Properties.RootItem.Item;
return mergeFilePath.StartsWith(branchPath.EndsWith("/") ? branchPath : branchPath + "/");
});

Console.WriteLine(branch.Properties.RootItem.Item);

如图所示,分支的路径在 BranchObject.Properties.RootItem.Item .我相信找到相关的 BranchObject 是安全的只需检查合并文件的路径中包含哪个分支的路径(假设最多只能匹配一个分支,因为 TFS 强制在给定的文件夹层次结构中只能存在一个分支)。

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

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

关于api - 找到合并分支的tfs路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16789639/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com