7

コマンドプロンプトでシェルフセットの内容を取得することに興味があります。ここで、TFSPowerToolsで利用可能なGet-TfsShelvesetなどのコマンドレットがこれを行うと考えるでしょう。また、「tf.exeshelvesets」がこれを行うと思うかもしれません。

しかし、何かを見逃していない限り、どちらも当てはまらないと報告することに愕然とします。代わりに、各コマンドでシェルフセット名を指定してから、そのシェルフセットの単一のラインアイテムと、creationdate、displaynameなどのシェルフセットに関するメタデータを逆流させるだけです。しかし、私が知る限り、方法はありません。実際に棚に何があるかを伝えるために。

これは、Get-TfsShelvesetにとって特に凶悪です。Get-TfsShelvesetには、返されるShelvesetオブジェクトとともにファイル記述子の配列を含めることができます。-WhatIf with Restore-TfsShelvesetを使用してファイル名を取得できると考えて、賢くしようとさえしましたが、残念ながら、Restore-TfsShelvesetは-WhatIfを実装していません。

誰かが私がこれについて間違っていると言ってください!

4

6 に答える 6

11
tf status /shelveset:name

名前付きシェルフセットのコンテンツが一覧表示されます(所有者にサプライヤを提供することもできます:を参照tf help status)。

TFS PowerToyのPowerShellスナップインを使用すると:

Get-TfsPendingChange -Shelveset name

同じ情報について。

于 2012-05-01T15:50:42.043 に答える
5

特定のシェルフセットに含まれるファイルのリストを返すTFSSDKを使用する小さなコマンドラインアプリケーションを構築することができます。
以下のサンプルは、Shelvesetの名前とその所有者の知識があることを前提としています。

using System;
using System.IO;
using System.Collections.ObjectModel;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Framework.Common;
using Microsoft.TeamFoundation.Framework.Client;
using Microsoft.TeamFoundation.VersionControl.Client;

namespace ShelvesetDetails
{
    class Program
    {
        static void Main(string[] args)
        {
            Uri tfsUri = (args.Length < 1) ? new Uri("TFS_URI") : new Uri(args[0]);

            TfsConfigurationServer configurationServer = TfsConfigurationServerFactory.GetConfigurationServer(tfsUri);

            ReadOnlyCollection<CatalogNode> collectionNodes = configurationServer.CatalogNode.QueryChildren(
                new[] { CatalogResourceTypes.ProjectCollection },
                false, CatalogQueryOptions.None);

            CatalogNode collectionNode = collectionNodes[0];

            Guid collectionId = new Guid(collectionNode.Resource.Properties["InstanceId"]);
            TfsTeamProjectCollection teamProjectCollection = configurationServer.GetTeamProjectCollection(collectionId);

            var vcServer = teamProjectCollection.GetService<VersionControlServer>();

            Shelveset[] shelves = vcServer.QueryShelvesets(
                "SHELVESET_NAME", "SHELVESET_OWNER");
            Shelveset shelveset = shelves[0];

            PendingSet[] sets = vcServer.QueryShelvedChanges(shelveset);
            foreach (PendingSet set in sets)
            {
                PendingChange[] changes = set.PendingChanges;
                foreach (PendingChange change in changes)
                {
                    Console.WriteLine(change.FileName);
                }
            }
        }
    }
}

このコンソールアプリを呼び出して、PowerShellの実行中に結果をキャッチできるはずです。

于 2011-07-12T12:07:29.450 に答える
3

試す:

tfptレビュー/shelveset:shelvesetName; userName

サーバーオプションを追加して、次のようにする必要がある場合もあります。

tfpt review / shelveset:Code Review; jim / slave:company-source

これがあなたが探しているものだと思います。

于 2011-07-02T00:14:35.140 に答える
2

これは、私のコメントにリンクされているhttp://akutz.wordpress.com/2010/11/03/get-msi/の記事にあるpentelifのコードとテクニックに基づいて、私が最終的に得たものです。

function Get-TfsShelvesetItems
{
    [CmdletBinding()]
    param
    (
        [string] $ShelvesetName = $(throw "-ShelvesetName must be specified."),
        [string] $ShelvesetOwner = "$env:USERDOMAIN\$env:USERNAME",
        [string] $ServerUri = $(throw "-ServerUri must be specified."),
        [string] $Collection = $(throw "-Collection must be specified.")
    )

    $getShelvesetItemsClassDefinition = @'
    public IEnumerable<PendingChange> GetShelvesetItems(string shelvesetName, string shelvesetOwner, string tfsUriString, string tfsCollectionName)
    {
        Uri tfsUri = new Uri(tfsUriString);
        TfsConfigurationServer configurationServer = TfsConfigurationServerFactory.GetConfigurationServer(tfsUri);
        ReadOnlyCollection<CatalogNode> collectionNodes = configurationServer.CatalogNode.QueryChildren( new[] { CatalogResourceTypes.ProjectCollection }, false, CatalogQueryOptions.None);
        CatalogNode collectionNode = collectionNodes.Where(node => node.Resource.DisplayName == tfsCollectionName).SingleOrDefault();
        Guid collectionId = new Guid(collectionNode.Resource.Properties["InstanceId"]);
        TfsTeamProjectCollection teamProjectCollection = configurationServer.GetTeamProjectCollection(collectionId);
        var vcServer = teamProjectCollection.GetService<VersionControlServer>();
        var changes = new List<PendingChange>();
        foreach (Shelveset shelveset in vcServer.QueryShelvesets(shelvesetName, shelvesetOwner))
        {
            foreach (PendingSet set in vcServer.QueryShelvedChanges(shelveset))
            {
                foreach ( PendingChange change in set.PendingChanges )
                {
                    changes.Add(change);
                }
            }
        }
        return changes.Count == 0 ? null : changes;
    }
'@;

    $getShelvesetItemsType = Add-Type `
        -MemberDefinition $getShelvesetItemsClassDefinition `
        -Name "ShelvesetItemsAPI" `
        -Namespace "PowerShellTfs" `
        -Language CSharpVersion3 `
        -UsingNamespace System.IO, `
                        System.Linq, `
                        System.Collections.ObjectModel, `
                        System.Collections.Generic, `
                        Microsoft.TeamFoundation.Client, `
                        Microsoft.TeamFoundation.Framework.Client, `
                        Microsoft.TeamFoundation.Framework.Common, `
                        Microsoft.TeamFoundation.VersionControl.Client `
        -ReferencedAssemblies "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.Client.dll", `
                                "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.Common.dll", `
                                "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.VersionControl.Client.dll" `
        -PassThru;

    # Initialize an instance of the class.
    $getShelvesetItems = New-Object -TypeName "PowerShellTfs.ShelvesetItemsAPI";

    # Emit the pending changes to the pipeline.
    $getShelvesetItems.GetShelvesetItems($ShelvesetName, $ShelvesetOwner, $ServerUri, $Collection);
}
于 2011-07-19T17:43:45.610 に答える
1

これもやろうとして数日を費やしましたが、これは常にグーグルに表示されたので、これが将来の世代を助けるために私が見つけたものです:

シェルフセットの内容を取得するには(少なくともTeam Explorer Everywhereを使用して)、
次のコマンドを使用します。tf difference /shelveset:<Shelveset name>

これにより、シェルフセットの内容が印刷され、ファイル名が次の形式で表示されます。
<Changetype>: <server file path>; C<base change number>
Shelved Change: <server file path again>;<shelveset name>

したがって、ファイルがcontents/test.txt
シェルフセットshelve1(ベースリビジョン1)にある場合は、次のように表示されます。
edit: $/contents/file.txt;C1
Shelved Change: $/contents/file.txt;shelve1

その後、tf printコマンド
(またはTEEを使用していない場合は表示)を使用$/contents/file.txt;shelve1すると、内容が表示されます。

tf print $/contents/file.txt;shelve1

file.txt棚にあるものを表示しますshelve1

于 2012-05-01T14:31:48.393 に答える
0

tfsコマンドを使用してサーバーからシェルフセットの変更を取得する場合

PowerShellの使用:

Get-TfsPendingChange -Server http://example.com/org -Shelveset shelvsetName

vsコマンドの使用:

c:\ projects> tf shelvesets BuddyTest_23

これについての詳細は、 https://docs.microsoft.com/en-us/azure/devops/repos/tfvc/shelvesets-command?view=azure-devopsを参照してください。

于 2019-11-14T07:47:44.187 に答える