2012-08-15 100 views
10

我想在两个分支之间生成一个合并候选列表,其中包含可以将复制粘贴到电子邮件中的格式的变更集注释。如何使用TFS命令行命令中的合并候选项获取变更集注释?

我知道我能做到这一点TF命令:

tf merge /candidate $/Branch1 $/Branch2 

它返回的东西这样的:

Changeset Author       Date 
--------- -------------------------------- ---------- 
    22282 developer1      08/09/2012 
    22354 developer2      08/14/2012 
    22361 developer2      08/14/2012 
    22365 developer2      08/14/2012 
    22381 developer3      08/15/2012 

不过,我想获得的意见为好。合并向导在执行“选定的变更集”合并时会做类似的操作。这里有一个例子:

enter image description here

我在想,我也许能以某种方式与该命令结合tf merge /candidate

tf changeset /noprompt 12345 

,其输出是这样的:

Changeset: 12345 
User: developer1 
Date: Thursday, August 09, 2012 5:20:01 PM 

Comment: 
    Completed various things 

Items: 
    merge, edit $/Branch1/BreakFreely.asmx.vb 
    merge, edit $/Branch1/FreelyBroken.vb 

Work Items: 
    ID Type    State Assigned To Title 
    ----- ------------------- ----- ------------ ----------------------------------------------------------------------------- 
    21406 Sprint Backlog Task Done JoDeveloper1 Fix various things 

Check-in Notes: 
    Code Reviewer: 
    Complete Lyblind 

总之,我期望的结果是这样的:

Changeset Author       Date  Comment 
--------- -------------------------------- ---------- -------------------------- 
    22282 developer1      08/09/2012 Fixed random stuff 
    22354 developer2      08/14/2012 Fixed specific stuff 

你觉得呢?

回答

3

如果您愿意使用TFS-SDK并编写您自己的控制台应用程序,这应该是非常简单的。
以下内容可以作为跳转启动:

using System; 
using Microsoft.TeamFoundation.Client; 
using Microsoft.TeamFoundation.VersionControl.Client; 

namespace MergeCandidates 
{ 
    class Program 
    { 
     static void Main() 
     { 
      TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://TFSURI")); 

      var versionControl = teamProjectCollection.GetService<VersionControlServer>(); 
      var mergeCandidates = 
       versionControl.GetMergeCandidates(@"$/FromPath", 
                @"$/ToPath", RecursionType.Full); 
      foreach (var mergeCandidate in mergeCandidates) 
      { 
       Console.WriteLine(string.Format("{0} {1} {2} {3}", 
               mergeCandidate.Changeset.ChangesetId, 
               mergeCandidate.Changeset.Owner, 
               mergeCandidate.Changeset.CreationDate, 
               mergeCandidate.Changeset.Comment)); 
      } 
     } 
    } 
}