10

電子メールにコピーして貼り付けることができる形式で変更セットのコメントを含む、2 つのブランチ間のマージ候補のリストを作成したいと思います。

私はこの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

ただし、コメントも取得したいと思います。マージ ウィザードは、「選択された変更セット」のマージを行うときに、同様のことを行います。次に例を示します。

ここに画像の説明を入力

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

どう思いますか?

4

1 に答える 1

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));
            }
        }
    }
}
于 2012-08-16T10:29:51.777 に答える