2010-01-28 19 views
7

El uso de herramientas de Visual Studio 2008,tf diff

estoy tratando de conseguir un diff ASCII de cambio fija 14318 y 14317.

puedo hacerlo a través de interfaz gráfica de usuario:

tf changeset 14318 

y luego seleccione un archivo y haga clic derecho y seleccione comparar con la versión anterior. Sin embargo, esto es un poco tedioso y está basado en GUI. Mi tarea es hacer una copia de respaldo de muchos cambios en una rama diferente. Me gustaría automatizar las pruebas (digamos usando Python), asegurándome de haberlo hecho correctamente. Bueno, para fines educativos, haré todos los cambios a mano sin mirar la solución, y luego compararé los dos cambios e intentaré buscar cualquier diferencia. Esto es lo que me gusta de tf - Puedo escribir:

tf changeset 14318 > out.txt&&notepad out.txt 

para ver los detalles de los archivos afectados.

Del mismo modo, deseo obtener un out.txt con todas las diferencias guardadas en él. Estoy bastante seguro de que puedo manejar la parte de Python. Definitivamente quiero saber cómo hacerlo usando la herramienta tf.exe, pero si también conocía otros trucos para lograr esto (alguna herramienta genial de terceros o una secuencia de comandos de PowerShell, por favor, hágamelo saber).

Gracias!

Ah, por cierto, he comprobado esto: http://msdn.microsoft.com/en-us/library/6fd7dc73(VS.80).aspx

Y he intentado esto:

tf diff 14318 14317 

Y he conseguido este error: El archivo (o carpeta) c: \ Archivos de programa (x86) \ Microsoft Visual Studio 9.0 \ VC \ 14318 no existe.

Ahora gracias.

EDIT: ¿Hay herramientas en todo lo que puedo hacer esto?

+0

¿Por qué te diga "Puedo hacerlo usando GUI: tf changeset 14318" ?? tf.exe es línea de comandos, no GUI. – pabrams

Respuesta

17

Simplemente no está utilizando la sintaxis correcta al llamarlo. En este caso, intentó hacer una diferencia entre su copia de trabajo y la versión del repositorio base de los archivos (no existentes) 14318 y 14317.

Lo que hay que hacer en su lugar es el uso de una serie de cambios en /version, así:

tf diff $/Foo /version:C14317~C14318 /recursive /format:unified > foo.diff 

Tenga en cuenta que se puede utilizar con cualquier ~ otras especificaciones de la versión - etiquetas, fechas, etc. Ver here para más detalles .

+0

¡Gracias! ¿Y cómo haría un diff en la versión actual (local) y la última, o sin modificar? ¡Muchas gracias! –

+0

Si no especifica el rango, pero solo una versión, su versión local se comparará con la que ha especificado, es decir,'/ version: C1000' compara la versión local con la que está después del conjunto de cambios 1000. La versión más reciente se puede especificar con'/version: T'. La versión base para su versión local es '/ versión: W' (tenga en cuenta que todos estos también se pueden usar en rangos, por lo que'/versión: C1000 ~ T' es perfectamente válida). Además, puede utilizar rutas de archivos locales en lugar de rutas de servidor TFS. –

+0

¡Creo que esto hace exactamente lo que quiero! ¿Por qué la gente no vota tu respuesta maldita sea? –

1

Aquí es un script de PowerShell (V2), que se extiende desde la respuesta de Pavel, esto será más performante, porque encontramos los archivos que han cambiado, a continuación, obtener tf diff de forma individual:

Write-Host "Checking if TFS snap-in has been added..." -ForegroundColor green 

# Find all TFS snapins. 
$snapins = Get-PSSnapin -Registered | Where-Object { $_.Name -like "*TeamFoundation*" } 

foreach($snapin in $snapins) 
{ 
    # Add snapin if not already added. 
    $exists = Get-PSSnapin | Where-Object { $_.Name -eq $snapin.Name } 
    if (!$exists) 
    { 
     Write-Host "Adding Snapin " $snapin.Name -ForegroundColor green 
     Add-PSSnapin $snapin.Name 
    } 
    else 
    { 
     Write-Host "Snapin already added." -ForegroundColor green 
    } 
} 



# Get TFS Server object reference. 
$tfs_server = Get-TfsServer -Name $/<serverName>/<RepoDir> 

# Get list of changed files 
$changes_from_changeset = Get-TfsChangeset -ChangesetNumber 829 | Select -Expand Changes | % { $_.Item.ServerItem } 
#$changes_from_changeset 

foreach($change in $changes_from_changeset) 
{ 
    &"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe" diff $change /version:829~T /format:unified 
} 
+0

Gracias, ¿cuáles son los requisitos previos para ejecutar esto? –

+0

Tendrá que tener las herramientas TFS Power instaladas para usar TF.exe y tener instalada la versión 2.0 de PowerShell. Las herramientas Power incluirán un complemento de PowerShell, que se usa al inicio del script. – Russell

+0

Buen punto de partida, aunque si alguien intenta reproducir esto en una máquina x64, asegúrese de cambiar "C: \ Archivos de programa \" a "C: \ Archivos de programa (x86) \". Además, esto debe ejecutarse en un directorio mapeado para que Get-TfsChangeset pueda encontrar el servidor ($ tfs_server nunca se usa). Finalmente, si quiere saber la diferencia entre dos versiones, no es suficiente para distinguir todos los archivos contenidos en el primer conjunto de cambios. Los cambios fuera de estos archivos pueden afectarlos. Deberá incluir todos los archivos que cambiaron entre la primera y la segunda versión, tal vez restringidos a una carpeta en particular. – SvenS