2009-06-25 36 views
18

Me gustaría ver todos los archivos que están bloqueados. Hasta ahora, solo he encontrado que uso el estado tf.exe y busco cualquier cosa con '!' porque no se informan como "bloquear, editar", ya que están en la interfaz de usuario. ¿Algunas ideas? Gracias.Buscar todos los archivos bloqueados en TFS

+0

Gran pregunta, ni idea de cómo hacer esto, sin embargo ... :) –

Respuesta

18

Si ha instalado el power tools, que es una sola línea:

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

Si prefiere las GUI a las secuencias de comandos, intente TFS Sidekicks.

+0

Esto se ve muy bien. Acabo de instalar las herramientas eléctricas el otro día pero no sabía que tenía comandos de Power Shell. ¿Sabes dónde puedo encontrar documentación sobre estos tipos? Además, ¿cómo configurarlo para que powershell pueda encontrar los dlls? – TheSean

+0

Debe haber documentación incluida en el archivo de ayuda. También dentro de powershell a través del comando 'help'. El complemento y los alias se cargarán automáticamente si ejecuta el enlace "consola de PowerShell" en el menú de inicio. O puede copiar la configuración desde el directorio de instalación en su perfil $. Lea mi blog para obtener más información: http://richardberg.net/blog –

+0

No se pudo encontrar la manera de hacerlo en TFS Sidekicks. Supongo que probaré las herramientas eléctricas. –

4

No creo que esto sea posible usando tf.exe o incluso tfpt.exe (The Power Tool command line). Tendrá que buscar en los conjuntos de cambios pendientes los cambios que son bloqueos. Se podría hacer esto en PowerShell mediante el Power Tool commandlets o puede hacerlo utilizando el siguiente fragmento de código .NET que ejerce la API de 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); 
      } 
     } 
     } 

    } 
    } 
} 
-5

He encontrado una opción de GUI.

  1. Inicie Visual Studio
  2. Abrir el archivo
  3. Ir a la fuente de control
  4. Entonces espacios de trabajo
  5. Introduzca sus credenciales
  6. verificación Mostrar espacios de trabajo remotas
  7. Retire todos los espacios de trabajo no deseados

Eso simple :)

+1

-1 ¿Cómo muestra esto todos los archivos bloqueados de todos los usuarios? – base2

6

Si está tratando de usar TFS Sidekicks, y no puede entender cómo hacerlo, está en Tools, Team Foundation Sidekicks, Status Sidekick. Tendrá que expandir esa ventana, pero luego podrá buscar bloqueos para un nombre de usuario.

+0

Las dos respuestas principales son bastante útiles, pero esto podría ser interesante. –

2

de su símbolo del sistema

>powershell 

Luego de hacer PowerShell:

PS > tf info * -recursive | &{ 
begin{ 
    [email protected]{} 
    $prefix = "loc" 
} 
process{ 
    if ($_ -match "Local information"){ 
    if ($out.Count -gt 0) { 
    [pscustomobject]$out 
    [email protected]{} 
    $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')} 
Cuestiones relacionadas