在命令提示符下获取Tfs Shelveset文件内容?

bwe*_*rks 7 powershell tfs command-line shelveset tfs2010

我有兴趣在命令提示符下获取shelveset的内容.现在,您会认为TFS Power Tools中提供的诸如Get-TfsShelveset之类的cmdlet可以执行此操作.您可能还认为"tf.exe shelvesets"会这样做.

但是,除非我错过了什么,否则我很震惊地报告说这两种情况都不是.相反,每个命令都要求你给它一个搁置集名称,然后简单地为该搁置集重新排序一个行项目,以及有关搁置集的一些元数据,如creationdate,displayname等.但据我所知,没办法告诉货架上的实际情况.

这对于Get-TfsShelveset来说尤其令人发指,它能够包含一个文件描述符数组以及它返回的Shelveset对象.我甚至试图变得聪明,以为我可以通过使用-WhatIf和Restore-TfsShelveset来收集文件名,但遗憾的是Restore-TfsShelveset没有实现-WhatIf.

拜托,有人告诉我,我错了!

Ric*_*ard 11

tf status /shelveset:name
Run Code Online (Sandbox Code Playgroud)

将列出指定shelveset的内容(您也可以供应商所有者:请参阅tf help status).

使用TFS PowerToy的PowerShell管理单元:

Get-TfsPendingChange -Shelveset name
Run Code Online (Sandbox Code Playgroud)

对于相同的信息.


pan*_*lif 5

可以构造一个使用TFS SDK的小型命令行应用程序,该应用程序返回给定shelveset中包含的文件列表.
以下示例假设知道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);
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

应该可以调用此控制台应用程序并在执行powershell期间捕获结果.