2012-08-15 101 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)); 
      } 
     } 
    } 
}