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)
对于相同的信息.
可以构造一个使用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期间捕获结果.