Найти все заблокированные файлы в TFS - PullRequest
18 голосов
/ 25 июня 2009

Я хотел бы видеть все файлы, которые заблокированы. до сих пор я нашел только использование состояния tf.exe и поиск всего с помощью '!' потому что они не сообщаются как «блокировка, редактирование», как в пользовательском интерфейсе. Есть идеи? спасибо.

Ответы [ 5 ]

19 голосов
/ 25 июня 2009

Если у вас установлены электроинструменты , это однострочник:

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

Если вы предпочитаете GUI сценариям, попробуйте TFS Sidekicks .

6 голосов
/ 20 августа 2012

Если вы пытаетесь использовать TFS Sidekicks и не можете понять, как это сделать, это в разделе Инструменты, Team Foundation Sidekicks, Status Sidekick. Вам нужно будет расширить это окно, но затем вы сможете искать блокировки для имени пользователя.

4 голосов
/ 25 июня 2009

Я не думаю, что это возможно при использовании tf.exe или даже tfpt.exe (командная строка Power Tool) . Вам нужно будет просмотреть ожидающие изменения для изменений, которые являются блокировками. Вы можете сделать это в powershell с помощью командлетов Power Tool или сделать это с помощью следующего кода .NET, который использует API TFS:

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

    }
  }
}
2 голосов
/ 30 апреля 2015

из командной строки

>powershell

Тогда из 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')}
0 голосов
/ 28 января 2012

Я нашел вариант с графическим интерфейсом.

  1. Запустить Visual Studio
  2. Открыть файл
  3. Перейти к управлению исходным кодом
  4. Тогда рабочие пространства
  5. Введите свои учетные данные
  6. Проверка показа удаленных рабочих областей
  7. Удалить все ненужные рабочие пространства

Это просто:)

...