5

tfs のフォルダーの特定のパスを指定すると、特定の変更セットのフォルダー内のすべてのファイルとフォルダーを再帰的に見つける必要があります。つまり、特定の変更セットの tfs でパスの推移的なクロージャーを取得する必要があります。私がそうする際に直面している問題は、tfs 内の特定のフォルダーの内容をリストすることです..これは C# でどのように可能でしょうか?

4

4 に答える 4

7

「チェンジセットXの一部であったフォルダの内容」ではなく、「チェンジセットXの時点のフォルダの内容」が必要だと仮定しています

GetItems は使用するのに適した呼び出しです。関心のある変更セットのバージョン仕様を渡すだけです。

http://msdn.microsoft.com/en-US/library/bb138911.aspx

そのため、VersionControlServer インスタンスへの参照が既にあると仮定します。

var myFolderAtChangeset17 = versionControlServer.GetItems("$/MyFolder", new ChangesetVersionSpec(17), RecursionType.Full);

私が誤解していて、たまたま「変更セット X の一部であるフォルダーの内容」を使用したい場合は、いくつかの方法がありますが、GetChangesetで変更セットを取得し、変更をフィルター処理するだけで簡単です。

于 2010-07-14T07:59:39.483 に答える
2

このようなものは、あなたが探しているものかもしれません。これは、変更セット内のすべての変更を取得し、それらを反復処理して、指定されたパス内の変更を識別します。これはlinqクエリで短縮できますが、私が言おうとしていることの要点を示すために、もう少し拡張したままにしています:

    TeamFoundationServer tfs = new TeamFoundationServer("http://tfs:8080");
    VersionControlServer vcs = tfs.GetService<VersionControlServer>();

    Changeset cs = vcs.GetChangeset(6284868);

    foreach (Change change in cs.Changes)
    {
        if (change.Item.ServerItem.StartsWith("$/Application Common/Dev/src"))
        {
            System.Diagnostics.Debug.WriteLine(string.Format("Changeset {0}, file {1}, changes {2}",
                cs.ChangesetId, change.Item.ServerItem, change.ChangeType.ToString()));
        }
    }
于 2010-07-13T19:35:19.310 に答える
0

私はこのような何かがうまくいくと思う..


    TeamFoundationServer tfs = new TeamFoundationServer("http://tfs:8080");   
    VersionControlServer vcs = tfs.GetService();   
    ItemSet items;

    items = vcs.GetItems(tfsPath, RecursionType.Full);

他のアイデアがあれば、投稿してください..

于 2010-07-13T19:47:18.503 に答える
-1

変更セット Web サービスを使用して、特定の変更セットの変更されたすべてのアイテムを含む XML ドキュメントを取得できます。次に、変更されたアイテムのリストをループして、探しているパスにあるかどうかを確認します。

変更セット Web サービスへの URL は次のとおりです。

http:// your_tfs_server/VersionControl/Changeset.aspx?artifactMoniker= your_changeset_number&webView=true

于 2010-07-13T18:48:55.457 に答える