在TFS中查找所有被锁定的文件

19

我想查看所有被锁定的文件。到目前为止,我只发现可以使用tf.exe状态命令,并查找任何带有 "!" 的内容,因为它们在用户界面中没有被报告为“锁定、编辑”。有什么想法吗?谢谢。


好问题,不过我不知道怎么做... :) - Jeroen Landheer
5个回答

20
如果你已经安装了Power Tools,那么只需要一行代码就可以了:
tfstatus . -r -user * | % { $_.pendingchanges } | ? { $_.islock } | select -unique serveritem

如果您更喜欢使用图形用户界面而非脚本,请尝试TFS Sidekicks


这看起来很不错。我前几天刚安装了Power Tools,但我不知道它有PowerShell命令。你知道我在哪里可以找到这些命令的文档吗?另外,我该如何设置PowerShell才能找到这些dll文件? - TheSean
帮助文件中应包含文档。同时,可以通过“help”命令在PowerShell中查看。如果您在开始菜单上运行“powershell console”链接,则快照和别名将自动加载。或者,您可以将安装目录中的设置复制到您的$profile中。有关详细信息,请阅读我的博客:http://richardberg.net/blog - Richard Berg
无法弄清如何在TFS Sidekicks中完成此操作。我猜我会尝试使用Power Tools。 - Patrick Szalapski
1
我遇到了一个问题,TFS Powertools控制台不知道TFS服务器在哪里。最简单的方法是让控制台的快捷方式“开始于”我的本地工作副本的根目录;这样,它就可以自动检测到TFS服务器。然而,我遇到了一个问题,快捷方式中的路径名对于Windows GUI来说太长了!我不得不卸载TFS powertools并将它们重新安装到一个较短的路径中;然后,快捷方式GUI才允许我编辑“开始于”目录。我启动了控制台,上述命令起作用了。 - Patrick Szalapski

6

如果您正在尝试使用TFS Sidekicks,但不知道如何使用,它在“工具”下的“Team Foundation Sidekicks”中的“状态Sidekick”选项中。您需要展开该窗口,但然后将能够搜索用户名的锁定。


前两个答案非常有帮助,但这也可能很有趣。 - Austin Henley

4
我认为使用 tf.exe,甚至 tfpt.exe (The Power Tool command line) 都无法实现这一点。您需要查看挂起的变更集以查找锁定的更改。您可以使用 Power Tool 命令行工具 在 powershell 中完成此操作,也可以使用下面这段 .NET 代码来使用 TFS API:
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;

namespace TfsApiExample
{
  class Program
  {
    static void Main(string[] args)
    {
      GetLockedFiles("http://tfsserver:8080","$/TeamProject");
    }

    private static void GetLockedFiles(string serverUrl, string serverPath)
    {
      TeamFoundationServer tfs = new TeamFoundationServer(serverUrl);
      VersionControlServer vcServer = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));

      // Search for pending sets for all users in all 
      // workspaces under the passed path.
      PendingSet[] pendingSets = vcServer.QueryPendingSets(
          new string[] { serverPath }, 
          RecursionType.Full, 
          null, 
          null);

      Console.WriteLine(
          "Found {0} pending sets under {1}. Searching for Locks...",
          pendingSets.Length, 
          serverPath);

      foreach (PendingSet changeset in pendingSets)
      {
        foreach(PendingChange change in changeset.PendingChanges)
        {
          if (change.IsLock)
          {
            // We have a lock, display details about it.
            Console.WriteLine(
                "{0} : Locked for {1} by {2}",
                change.ServerItem, 
                change.LockLevelName, 
                changeset.OwnerName);
          }
        }
      }

    }
  }
}

3

从你的命令提示符

>powershell

然后在PowerShell中执行以下命令:

PS > tf info * -recursive | &{
 begin{
  $out=@{}
  $prefix = "loc"
 }
 process{
  if ($_ -match "Local information"){
   if ($out.Count -gt 0) {
    [pscustomobject]$out
    $out=@{}
    $prefix = "loc"
   }
  } ElseIf ($_ -match "Server information"){
   $prefix = "svr"
  } else {
   $parts = $_.Split(':')
   if ($parts.Length -eq 2){
    $out.Add($prefix + $parts[0].Trim(), $parts[1].Trim())
   }
  }
 }
 end{
  if ($out.Count -gt 0) {
   [pscustomobject]$out
  }
 }
} | where {!($_.svrLock -eq 'none')}

-6

我找到了一个GUI选项。

  1. 启动Visual Studio
  2. 打开文件
  3. 进入源代码控制
  4. 然后进入工作区
  5. 输入您的凭据
  6. 勾选显示远程工作区
  7. 删除所有不需要的工作区

就这么简单 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接