Ver diferencias en un archivo de "diferencias unificadas" una al lado de la otra

Cuando tengo muchos cambios pequeños en varios archivos en una carpeta de origen de Suversion, es conveniente mirar los cambios a través de un gran archivo de diferencias unificado . Para ser claros, un archivo de diferencias unificado , como el producido por subversion, se ve así (el ejemplo contiene las diferencias de dos archivos, todas las diferencias aparecen en el mismo archivo .diff):

Index: file1.py
===================================================================
--- file1.py    (revision 2)
+++ file1.py    (working copy)
@@ -227,7 +229,7 @@
         some line of code
         some other line of code
         yet a third line of code
-        first change, left
+        first change, right
         some line of code
         some other line of code
         yet a third line of code
@@ -608,8 +610,8 @@
         some line of code
         some other line of code
         yet a third line of code
-##         second change, left
-##         third change, left
+        second change, right
+        third change, right
         some line of code
         some other line of code
         yet a third line of code
\ No newline at end of file
Index: file2.py
===================================================================
--- file2.py    (revision 3)
+++ file2.py    (working copy)
@@ -3607,22 +3630,22 @@
         some line of code
         some other line of code
         yet a third line of code
-##         first change, left
-##         second change, left
+        first change, right
+        second change, right
         some line of code
         some other line of code
         yet a third line of code
@@ -7988,7 +8011,7 @@
         some line of code
         some other line of code
         yet a third line of code
-        third change, left
+        third change, right
         some line of code
         some other line of code
         yet a third line of code

Como puede imaginar, si hay muchos cambios similares en varios archivos, es muy conveniente mirar esto en tortoiseudiff (tenga en cuenta la "u" en el nombre), ya que codifica los cambios por color y puede escanearlos rápidamente. Sin embargo, tortoiseudiff muestra este archivo tal como es (además de algún resaltado de sintaxis): los lados "izquierdo" y "derecho" de la diferencia se secuencian verticalmente en lugar de uno al lado del otro. Sería aún mejor ver los dos lados de cada bloque de diferencias uno al lado del otro en lugar de arriba/abajo. Algo como esto:

Index: file1.py
===================================================================
--- file1.py    (revision 2)
+++ file1.py    (working copy)
@@ -227,7 +229,7 @@
    some line of code                      some line of code
    some other line of code                some other line of code
    yet a third line of code               yet a third line of code
-   first change, left                 +   first change, right
    some line of code                      some line of code
    some other line of code                some other line of code
    yet a third line of code               yet a third line of code
@@ -608,8 +610,8 @@
    some line of code                      some line of code
    some other line of code                some other line of code
    yet a third line of code               yet a third line of code
-##         second change, left
-##         third change, left
+        second change, right
+        third change, right
    some line of code                      some line of code
    some other line of code                some other line of code
    yet a third line of code               yet a third line of code
\ No newline at end of file
Index: file2.py
===================================================================
--- file2.py    (revision 3)
+++ file2.py    (working copy)
@@ -3607,22 +3630,22 @@
    some line of code                      some line of code
    some other line of code                some other line of code
    yet a third line of code               yet a third line of code
-##   first change, left             +     first change, right
-##   second change, left            +     second change, right
    some line of code                      some line of code
    some other line of code                some other line of code
    yet a third line of code               yet a third line of code
@@ -7988,7 +8011,7 @@
    some line of code                      some line of code
    some other line of code                some other line of code
    yet a third line of code               yet a third line of code
-   third change, left                 +   third change, right
    some line of code                      some line of code
    some other line of code                some other line of code
    yet a third line of code               yet a third line of code

o aun mejor esto:

Index: file1.py
===================================================================
--- file1.py    (revision 2)
+++ file1.py    (working copy)
@@ -227,7 +229,7 @@
                     some line of code
                     some other line of code
                     yet a third line of code
-        first change, left             +        first change, right
                     some line of code
                     some other line of code
                     yet a third line of code
@@ -608,8 +610,8 @@
                     some line of code
                     some other line of code
                     yet a third line of code
-##         second change, left         +        second change, right
-##         third change, left          +        third change, right
                     some line of code
                     some other line of code
                     yet a third line of code
\ No newline at end of file
Index: file2.py
===================================================================
--- file2.py    (revision 3)
+++ file2.py    (working copy)
@@ -3607,22 +3630,22 @@
                     some line of code
                     some other line of code
                     yet a third line of code
-##         first change, left          +        first change, right
-##         second change, left         +        second change, right
                     some line of code
                     some other line of code
                     yet a third line of code
@@ -7988,7 +8011,7 @@
                     some line of code
                     some other line of code
                     yet a third line of code
-        third change, left             +        third change, right
                     some line of code
                     some other line of code
                     yet a third line of code

Estoy en MS Windows, así que miré winmerge, tortoiseudiff, tortoiseidff, ninguno es compatible con esto. He buscado en la web otras opciones pero no he tenido suerte.

Alguien sabe de una herramienta que hace esto?

Respuestas (1)

Creo que Beyond Compare satisface sus necesidades. La función de comparación de carpetas muestra qué archivos son diferentes entre dos conjuntos de carpetas y luego puede seleccionar todos los archivos y generar un informe de diferencias de archivos, que creo que es lo que desea. Usando un ejemplo simple, la GUI se ve así:

Comparación de carpetas de Beyond Compare

y el informe queda así:

FILE COMPARISON
Produced: 15/05/2014 12:27:16

Mode:  All Lines
Left base folder: C:\Example
Right base folder: C:\Example2

File: Subfolder\File3.txt
1 Test         =  1 Test
2 Another test    2 Another test
----------------------------------------------
               -+ 3 Extra line
----------------------------------------------
3 More testing =  4 More testing
----------------------------------------------

File: File1.txt
1 Test         <> 1 Deleted line
                  2 Another modified line test
2 Another test    3 Extra line
----------------------------------------------
3 More testing =  4 More testing
----------------------------------------------

File: File2.txt
1 Test         =  1 Test
2 Another test    2 Another test
3 More testing    3 More testing
----------------------------------------------

En este ejemplo, he mostrado todas las líneas incluso si son iguales, pero es posible filtrar para mostrar solo las líneas modificadas si lo desea. También hay una interfaz de secuencias de comandos si no desea pasar por la GUI y una prueba gratuita de 30 días.