这遵循我之前关于 TFS 2010 的问题以及创建变更日志的可能性。
我以前使用标签来识别程序的版本,但由于标签不是固定的时间点,现在我使用的是分支。
分支层次结构如下所示:
如您所见,有两个不同的应用程序是主干的分支:(APP_A
应用程序 A)和APP_B
(应用程序 B)。两者几乎相同,但存在一些功能差异。
以下是创建应用程序新版本(比如 1.3 版)的过程:
- 已
Main trunk
修改(添加了新功能,修复了错误......) - 从修改后
Main trunk
的 中,创建了一个新分支:Main trunk 1.3
APP_A
分支可能会被修改,因此独特的功能APP_A
将与 v1.3 的修改一起使用APP_B
分支可能会被修改,因此独特的功能APP_B
将与 v1.3 的修改一起使用Main trunk 1.3
被合并到APP_A
andAPP_B
,所以APP_A
andAPP_B
应用程序都会收到Main trunk
- 从修改后
APP_A
的分支中,创建一个新分支:APP_A_1.3
- 从修改后
APP_B
的分支中,创建一个新分支:APP_B_1.3
我的目标是能够在APP_A_1.3
和之间生成变更日志APP_A_1.2
。
变更日志是指工作项列表。签入的每个变更集都与一个或多个 WorkItem(例如 Bug 项)相关联。我希望能够获得链接到受影响的变更集的所有工作项的列表APP_A_1.3
:这些变更集可能来自Main trunk
(上面的步骤 1)、APP_A branch
(上面的步骤 3)甚至APP_A_1.3
分支本身(如果修补程序是在创建分支后签入)。
要获取此工作项列表,我尝试获取“链接”到的所有变更集的列表APP_A_1.2
(“链接”=在变更集中签入的代码现在在分支上APP_A_1.2
)以及所有变更集的列表被“链接”到APP_A_1.3
。
然后,我将能够知道哪些变更集“链接”到APP_A_1.3
而不是“链接”到APP_A_1.2
. 从这个变更集子集中,我将获得所有关联的 WorkItems 以及我的变更日志。
这是我的问题:我怎么能得到ALL的列表与指定分支“链接”我将 TFS 2010 API 用于 C# 代码。
我的程序的输入(将检索指定分支的所有变更集)将是分支的名称(例如APP_A_1.2
),输出将是以下变更集的列表:
- 应用于
APP_A_1.2
分支本身的变更集 - 创建之前应用于
APP_A
分支的变更集APP_A_1.2
Main trunk 1.2
在分支合并之前应用到分支上的变更集APP_A
- 创建之前应用于
Main trunk
分支的变更集Main trunk 1.2
我编写了以下代码来获取所有这些变更集:
// Gets the list of all changesets ID from APP_A_1.2 branch
var branch1ChangeSets = myVersionControlServer.QueryHistory(
"$/PATH/APP_A_1.2/",
VersionSpec.Latest,
0,
RecursionType.Full,
null,
null,
null,
int.MaxValue,
false,
false).OfType<Changeset>().Select(z => z.ChangesetId).ToList();
即使RecursionType.Full
指定了,上面的代码也只返回在APP_A_1.2
分支本身签入的变更集。这与 Visual Studio 中源代码资源管理器视图中的“历史记录”命令相同。
然后我尝试了以下代码:
// Gets the list of all changesets ID from APP_A_1.2 branch
var branch1MergedChangeSets = myVersionControlServer.QueryMerges(
null,
null,
"$/PATH/APP_A_1.2/",
VersionSpec.Latest,
null,
null,
RecursionType.Full).Select(z => z.SourceVersion).ToList();
这将返回在分支上签入的变更集APP_A_1.2
+ 在创建APP_A
之前在分支上签入的变更集APP_A_1.2
。好多了,但还不够。我找不到一种方法使递归与“高于”的分支一起工作APP_A
(Main trunk
在我的情况下)......
有人有想法吗?
此外,欢迎任何更好的想法来获取两个分支之间的变更日志......谢谢。