2012-07-23 764 views
5

Estoy tratando de generar el archivo diff (archivo de parche) y aplicar este parche a alguna carpeta ya desplegada. Estoy funcionando con el siguiente comando para generar el archivo diff:tfs generación de archivos diff unificados. línea de encabezado no coincide con el comando de parche

tf diff version.asp /format:unified > C:\patch.diff

Genera algo como:

Comparing local to latest: C:\dev\folder\version.asp File: version.asp ===================================================================

--- version.asp (local) 2011-06-17 09 : 18texto, después del nombre de archivo, no debería estar aquí

+++ v ersion.asp; 958 (servidor) 2011-09-19 14:27lo mismo aquí

@@ -13,7 +13,7 @@ 
'============================================================ 
Dim APP_VERSION, APP_BUILD, APP_DATE 
APP_VERSION = 6 
-APP_BUILD = 45 
+APP_BUILD = 52 
%> 
\ No newline at end of file 
============================================================ 

El problema aparece en la línea que está en negrita. La aplicación UNIX parche no reconoce los nombres de los archivos porque estas líneas solo deben contener el nombre del archivo sin ninguna información adicional. Si elimino el texto después del nombre del archivo en esas líneas, parche se ejecutará correctamente. Entonces mi pregunta es: ¿es posible generar archivos diff desde tf diff sin dicha información en el encabezado para que sea compatible con parche?

Existe una alternativa como aplicar regex y reemplazar tales líneas, pero sería el último intento de hacerlo funcionar.

que

ACTUALIZACIÓN

Gracias al final terminé con regex que elimina los datos innecesarios de las líneas, ejecutarlo con Unix sed utilidad, tengo la versión de Windows desde MinGW.

sed "s/^\(+++\|---\)\(.*\)\(\.[A-Za-z0-9]\{1,4\}\)\(.*\)$/\1\2\3/" C:\patch.diff > C:\patch.new

patch.diff es archivo con formato incorrecto generado a partir de tfs y en la salida patch.new es archivo diff unificado correcta y compatible con patch utilidad

Update2

después de horas de golpearse la cabeza contra la pared , descubrí que en archivos diff generados a partir de tfs, los caracteres extendidos Unicode simplemente se escapan o se reemplazan por sus cerrados t Representación ASCII.

Así que, por ejemplo, si el código tiene una letra ä, en el archivo de salida diff será reemplazado por una simple letra a.

Esto hace que los archivos diff generados a partir de la utilidad tfs, inútiles.

Esto es un error obviamente.

FYI: estoy usando VS2010 y Team Foundation Server 2010.

+0

¿Se pueden comparar los mismos dos archivos con 'diff -u' y luego se difieren los diffs? –

+0

En realidad no recibí tu pregunta, lo siento – matsoor

+0

al final terminé con expresiones regulares que elimina esa información innecesaria de las líneas, ejecutarlo con el comando 'sed' de Unix, obtuve la versión de Windows de MinGW. 'sed" s/^ \ (+++ \ | --- \) \ (. * \) \ (\. [A-Za-z0-9] \ {1,4 \} \) \ (. * \) $/\ 1 \ 2 \ 3/"C: \ patch.diff> C: \ patch.new' aquí' patch.diff' es un archivo mal formado y en la salida 'patch.new' es el archivo correcto y compatible con 'patch' utility – matsoor

Respuesta

1

Por lo que vale la pena, no podía imaginar esto tampoco. TFS crea archivos mal formados con/unificado.

trabajé alrededor de ella utilizando un git instalación local:

(shelve change set) 
tfpt scorch 
git init 
git add . 
git commit -a -m "Original" 
git checkout -b "New" 
(checkout shelf in tfs) 
git add . 
git commit -a -m "Change" 
git format-patch master 

:/

1

Si la salida de tf diff /format:unified difiere de diff -u y es incompatible con patch, entonces esto es un error que debe informar a Microsoft

Como dices, la solución es encontrar y reemplazar tediosamente.

Cuestiones relacionadas