签入变更集以编程方式合并

时间:2018-05-29 09:16:44

标签: c# tfs tfvc

我正在检索与WorkItem相关的tfvc变更集。我的下一步是我想检查它们是否合并到特定分支。我没有找到任何关于如何在c#中执行此操作的内容。

今天我拥有的是:

using (var changeSetClient =
                new TfvcHttpClient(_uri, _credentials))
            {

                foreach (var relation in wi.Relations.Where(r => r.Url.Contains("Changeset")))
                {
                    var changeset = changeSetClient.GetChangesetAsync("Welfare_Research_2009", relation.Attributes["id"]).Result;
                    changeset.

                }
            }
            return null;
}

我也可以得到合适的TfvcBranch,我想知道它是否合并。

但我如何检查它是否合并?与Visual Studio中的“Track Changesets”功能非常相似。

2 个答案:

答案 0 :(得分:2)

根据您的说明,VersionControlServer.TrackMerges()是您要使用的API。

TrackMerges(array<Int32[], ItemIdentifier, array<ItemIdentifier[], ItemSpec)

获取从源项目到一组目标项目的合并,以获取源变更集ID的列表。

  

在sourceItem参数中,传递您想要的分支的根目录   跟踪变化。在targetItems参数中,传递根目录   要跟踪变更集的分支。注意,这会   仅适用于具有合并关系的分支根。最好的   确保这是真的方法是查看分支层次结构和make   分支机构通过某种途径直接相关或相关。

     

我们假设您要跟踪从$ / Proj / Main到的变更集   分支层次结构中的$ / Proj / Feature2如下:

$/Proj/Main
    $/Proj/Dev
       $/Proj/Feature2
     

然后你想要传递$ / Proj / Main作为你的sourceItem和   $ / Proj / Dev AND $ / Proj / Feature2 as targetItems。

更多细节代码和示例请参阅此博客:TFS API - TRACK CHANGESET MERGE IN BRANCHES

答案 1 :(得分:0)

可能有更有效的方法,但您可以使用以下内容查询相应分支的历史记录:

// pseudo code
var parameter = new QueryHistoryParameters();
parameter.RecursionType = RecursionType.Full;
parameter.IncludeChanges = true;
// set other members to potentially filter out unneeded stuff
// especially, say, "VersionStart" / "VersionEnd".

var result = workspace.VersionControlServer.QueryHistory(parameter);

foreach (var entry in result)
{
     // Compare "entry.ChangesetId" with the ID of the changeset you're looking for.
}

请注意,可以通过不同方式收集对VersionControlServer接口的引用。上面我假设你已经有工作区参考。