【问题标题】:Determine in which branches a changeset in present确定当前变更集在哪些分支中
【发布时间】:2019-02-05 02:54:35
【问题描述】:

我需要以编程方式跟踪变更集:确定变更集当前位于哪个分支。

更新: 假设我们有一个项目的三个分支:Dev、Test 和 Release。每当我们准备好使用一些变更集时,我们首先将它们合并到测试,然后在测试完成后立即发布。我需要知道给定变更集在此工作流中的位置(仅在开发中在开发中+在测试中合并在开发中+在测试中合并+合并在发布中)。

使用 Visual Studio“跟踪”界面已经可以做到这一点,但我需要以编程方式进行,以获得更多的自定义。我已经能够使用代码provided here 获取特定工作项的所有变更集,但我还没有找到一种方法来确定当前变更集在哪些分支中。

【问题讨论】:

  • 好吧。当然,变更集可以包含多个分支中的文件。但实际上您需要做的就是查看服务器路径前缀,还是您正在尝试做一些更复杂的事情?
  • 我不确定我理解您所说的“服务器路径前缀”是什么意思。你能指出它在 TFS SDK 中是如何表示的吗?
  • 我的意思是$/Project/MainMain 分支中,根据定义... $/Project/Branches/FooFoo 分支中,根据定义...我不确定我还没有看到除此之外,您还想确定什么...
  • 我在问题中澄清了我想要实现的目标。

标签: tfs tfs-sdk


【解决方案1】:

我刚刚做了一个工具,它做同样的事情。您需要的电话是 TrackMerges。好消息是您可以在一个电话中检查多个分支。这是一个代码sn-p:

var tfsCollection = new TfsTeamProjectCollection(new Uri(server), new NetworkCredential(username, password, userDomain));
tfsCollection.EnsureAuthenticated();
VersionControlServer versionControlServer = tfsCollection.GetService<VersionControlServer>();

ExtendedMerge[] merges = versionControlServer.TrackMerges(
                                  new[] {changesetIdYouAreChecking}, 
                                  new ItemIdentifier("$/Proj/Dev"), 
                                  new [] {new ItemIdentifier("$/Proj/Test"), new ItemIdentifier("$/Proj/Release")}, 
                                  null);

foreach (ExtendedMerge extendedMerge in merges)
{
    Console.WriteLine("Branch --> " + extendedMerge.TargetItem.Item);
    Console.WriteLine("Changeset --> " + extendedMerge.TargetChangeset.ChangesetId);
}

如果 merges 变量不包含您要查找的分支,那么它还没有被合并。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多