tfs のフォルダーの特定のパスを指定すると、特定の変更セットのフォルダー内のすべてのファイルとフォルダーを再帰的に見つける必要があります。つまり、特定の変更セットの tfs でパスの推移的なクロージャーを取得する必要があります。私がそうする際に直面している問題は、tfs 内の特定のフォルダーの内容をリストすることです..これは C# でどのように可能でしょうか?
4 に答える
「チェンジセット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で変更セットを取得し、変更をフィルター処理するだけで簡単です。
このようなものは、あなたが探しているものかもしれません。これは、変更セット内のすべての変更を取得し、それらを反復処理して、指定されたパス内の変更を識別します。これは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()));
}
}
私はこのような何かがうまくいくと思う..
TeamFoundationServer tfs = new TeamFoundationServer("http://tfs:8080");
VersionControlServer vcs = tfs.GetService();
ItemSet items;
items = vcs.GetItems(tfsPath, RecursionType.Full);
他のアイデアがあれば、投稿してください..
変更セット Web サービスを使用して、特定の変更セットの変更されたすべてのアイテムを含む XML ドキュメントを取得できます。次に、変更されたアイテムのリストをループして、探しているパスにあるかどうかを確認します。
変更セット Web サービスへの URL は次のとおりです。
http:// your_tfs_server
/VersionControl/Changeset.aspx?artifactMoniker= your_changeset_number
&webView=true