2009-12-29 20 views
16

Cualquiera sabe si esto (generar un diff unificado) es posible y, de ser así, ¿cómo?Unified Diff en TFS

Gracias.

+0

posible duplicado de [Crear un parche con TFS] (http://stackoverflow.com/questions/52234/creating-a-patch-with-tfs) – sloth

Respuesta

13

Es tf diff /shelveset:<set> /format:unified. Sin embargo, tenga en cuenta que, a diferencia de la mayoría de los sistemas modernos de control de versiones, TFS no puede funcionar con los archivos patch afaik. Es decir, no puede tomar el resultado de la diferencia y aplicarlo a un conjunto de archivos para obtener los cambios resultantes. (Lo que la mayoría de las personas hace es comprimir los archivos que cambiaron y soltar-y-reemplazar eso como un "parche". Ick.)

+0

John, ¿sabría cómo generar los resultados en un diff? herramienta en lugar de a la ventana de comandos? Accidentalmente encontré eso/opciones:? iría a mi herramienta de combinación predeterminada (TortoiseMerge.exe) en la ausencia de una/formato: opción unificada, pero no pude conseguir que vaya allí con la opción unificada activada. Además, solo puedo ver mis propios shelvesets, me gustaría ver todos los shelvesets para el equipo, ¿es posible o debo ejecutar tf.exe desde el servidor? – sydneyos

+0

perfecto - gracias.para otros como yo, que quizás no lo sepan, tf.exe está aquí (a menos que haya instalado en otro lugar) - C: \ Archivos de programa \ Microsoft Visual Studio 9.0 \ Common7 \ IDE. Aquí hay una referencia: http://tutorial.visualstudioteamsystem.com/details.aspx?item=38. – sydneyos

+0

Descubrí cómo hacer que esto salga a un archivo .diff. Escriba el comando: "tf diff/format: unificado [/ shelveset: ]> filename.diff" Luego, si tiene algo instalado (como TortoiseSVN) que se ocupará del formato .diff, simplemente ábralo. et voila! – sydneyos

0

Esta es una característica en curso diff (perdón por el juego de palabras) con SubVersion y otros, eso es recognised by Microsoft. Creo que una solución aparecerá pronto, sin embargo, hasta entonces, he llegado a una solución:

  1. construir una aplicación de Windows Forms que se llevará a 4 campos como parámetros de línea de comandos (filepath1, label1, filepath2, LABEL2) y devuelve una cadena de diff unificada de los dos archivos (tal vez la salida a un cuadro de texto enriquecido o algo así). Tengo uno, pero creo que es un poco difícil para CodePlex. Hay algunas bibliotecas administradas de Diff.

  2. Establezca la función de comparación de control de origen de Visual Studio para apuntar a su aplicación diff. Asegúrate de que se abra y se compare correctamente.

  3. Cree una aplicación de parches de Windows forms, que aplicará el parche a una carpeta. La aplicación también debe verificar cada archivo mientras está parcheado (¡divertido!).

  4. Configure dos espacios de trabajo, el habitual, y un MyWkSpace_PATCH. Esto se usa para parchear.

Todavía tengo que terminar el punto 3, pero esto me dará una funcionalidad similar a SubVersion. ¡Te dejaré saber cómo va el punto 3!

12

Esto es lo que suele hacer:

  • generar un diff unificado desde la línea de comandos tf para obtener un archivo de revisión

    tf diff /recursive /format:unified . >> diff.patch 
    
  • utilidad de descarga del parche de http://gnuwin32.sourceforge.net/packages/patch.htm

  • Aplicar parche con

    patch.exe -p0 < diff.patch 
    

Obviamente, esto supone que los archivos de origen ya están desprotegidos. Si no lo están, especialmente cuando está aplicando parches en las sucursales, escriba un script de shell simple para ir a través del archivo diff, obtenga la ruta de los archivos y tf edítelos.

+0

para mi configuración (windows 7, tfs 2013) crear un parche desde tfs2013 está bien, pero la utilidad de parche no puede aplicar esos parches, a archivos similares. la respuesta es "no se puede encontrar el archivo para parchear en la línea de entrada 6 ¿Quizás utilizó la opción -p o --strip incorrecta?" – ozkolonur