TFS API – 获取合并的变更集

我有一个程序,它读取最新的构建并从中获取所有变更集。 然后可以确定我拥有它的变量是否实际上是合并,以及它来自何处。

这就是我所拥有的:

List changeSets = InformationNodeConverters.GetAssociatedChangesets(build); IEnumerable changesetDetails = changeSets.Select(x => versionControlServer.GetChangeset(x.ChangesetId)); // Determine is the first changeset was a merge changesetDetails.First().IsMerge // How to check is the changeset is part of a merge? 

更新:

到目前为止,我已经更新了答案

 foreach (var cs in changesetDetails) { foreach (Change change in cs.Changes) { if ((change.ChangeType & ChangeType.Merge) == 0) continue; foreach(var m in change.MergeSources) 

MergeSources总是空的。

请改用VersionControlServer.GetChangesForChangeset方法。 最后一个参数表示应包含合并源信息。

 List changeSets = InformationNodeConverters.GetAssociatedChangesets(build); IEnumerable changes = changeSets.SelectMany(x => versionControlServer.GetChangesForChangeset(x.ChangesetId, false, Int32.MaxValue, null, null, true)); foreach (Change change in changes) { if ((change.ChangeType & ChangeType.Merge) == 0) continue; foreach (var m in change.MergeSources) { // ... } } 

您需要检查Changeset中的任何Changes是否属于ChangeType Merge

我不知道以下是否有效,但你明白了:

 changesetDetails.First().Changes.Any(c => (c.ChangeType & ChangeType.Merge) > 0) 

如果操作是“合并”,您将需要查询文件。

使用接受includeDownloadInfo bool参数的VersionControlServer.GetChangeset的重载。 将此参数设置为true将包括返回的变更MergeSources

 IEnumerable changesetDetails = changeSets.Select(x => versionControlServer.GetChangeset(x.ChangesetId, true, true)); 

[ https://msdn.microsoft.com/en-us/library/bb138628.aspx ]