Find all locked files in TFS

蓝咒 提交于 2019-12-03 08:39:55

问题


I would like to see all files that are locked. so far, I've only found to use tf.exe status and look for anything with '!' because they are not reported as "lock, edit" as they are in the UI. Any ideas? thanks.


回答1:


If you have the power tools installed, it's a one-liner:

tfstatus . -r -user * | % { $_.pendingchanges } | ? { $_.islock } | select -unique serveritem

If you prefer GUIs to scripts, try TFS Sidekicks.




回答2:


If you are trying to use TFS Sidekicks, and can't figure out how, it is under Tools, Team Foundation Sidekicks, Status Sidekick. You will need to expand that window, but you will then be able to search for locks for a username.




回答3:


I don't think this is possible using tf.exe or even tfpt.exe (The Power Tool command line). You'll need to look through the pending changesets for changes that are locks. You could do this in powershell using the Power Tool commandlets or you could do it using the following bit of .NET code that exercises the 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);
          }
        }
      }

    }
  }
}



回答4:


from your command prompt

>powershell

Then from powershell do:

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')}



回答5:


I've found a GUI option.

  1. Start Visual Studio
  2. Open file
  3. Go to source control
  4. Then workspaces
  5. Enter your credentials
  6. Check show remote workspaces
  7. Remove all unwanted workspaces

That simple :)



来源:https://stackoverflow.com/questions/1041913/find-all-locked-files-in-tfs

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!