Obtener el id de conjunto de cambios actual en workspace para TFS


¿Cómo puedo averiguar qué conjunto de cambios tengo actualmente en mi espacio de trabajo local?

Claro, puedo elegir un archivo y ver su historial. Sin embargo, si ese archivo no se actualizó recientemente, su conjunto de cambios es probablemente más antiguo que los archivos actualizados más recientemente en la misma solución.

Un posible error que podemos cometer es que vemos el historial en el archivo de la solución, sin embargo, el archivo de la solución rara vez cambia a menos que esté agregando un nuevo proyecto / creando un nivel de solución cambio.

Al final para averiguar el conjunto de cambios necesito recordar cuáles fueron los últimos archivos cambiados y ver su historial.

¿Hay una mejor manera de hacer esto?

 64
tfs
Author: boyan, 2011-10-13

3 answers

Tu respuesta está en un blog de MSDN de Buck Hodges: Cómo determinar el último conjunto de cambios en tu espacio de trabajo

Desde la raíz (arriba) de su espacio de trabajo, en cmd realice:

tf history . /r /noprompt /stopafter:1 /version:W
 90
Author: kroonwijk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-13 20:31:56

La respuesta común para usar tf.exe history . /r directamente funciona, pero puede ser terriblemente lenta. En nuestro caso se tarda 10-15 segundos. Ahora uso una comprobación de dos etapas, primero comprobando la revisión de algunos archivos arbitrarios (estoy usando los archivos en la carpeta raíz).

Con powershell:

$tfexepath = "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\tf.exe"
$localpath = "C:\some\tfs\directory"

$result = & $tfexepath history $localpath /noprompt /stopafter:1 /version:W 
"$result" -match "\d+" | out-null
$id = $matches[0]

Luego busque desde la raíz usando la bandera / r, pero limite la búsqueda para comenzar desde la revisión encontrada arriba:

$result2 = & $tfexepath history $localpath /r /noprompt /stopafter:1 /version:$id~W        
"$result2" -match "\d+" | out-null
$id2 =  $matches[0]

#result:
Write-Host $id2 

Para nuestra base de código, esto reduce el tiempo total de 10-15 a 1.4-1.5 segundo.

Por lo que entiendo no hay inconvenientes o limitaciones, pero supongo que podría ser más lento en un repositorio pequeño. - Me encantaría saberlo.

 1
Author: Johan Lundberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-20 01:42:20

Si desea utilizar PowerShell (véase también ; equivalente a la respuesta de @kroonwijk):

  1. Habilitar tfs snapin (una vez, si no ya)

    add-pssnapin Microsoft.TeamFoundation.PowerShell

  2. Utilice el cmdlet tfs para obtener el id actual del conjunto de cambios

    Get-TfsItemHistory <PATH_TO_PROJECT> -Recurse -Stopafter 1 -Version W

 0
Author: fuma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-17 10:08:22