2009-02-20 8 views
15

Después de un blog, he creado un archivo por lotes, wm.bat:Cambio por defecto SVN diffing herramienta

"d:\svnroot\external\winmerge\WinMerge.exe" /B /WAIT "d:\svnroot\external\winmerge\WinMergeU.exe" /e /ub /dl %3 /dr %5 %6 %7 

Y trató de llamar a

svn diff | wm 

pero que no funcionó. Entonces, ¿cómo puedo integrar WinMerge o una utilidad similar con svn diff?

Extendiéndose sobre la respuesta de David a continuación, cambiar el valor por defecto para Windows requiere la edición del archivo de configuración ubicado en el (para Windows   XP)

C:\Documents and Settings\%USERNAME%\Application Data\Subversion\config 

o (Windows   Vista)

C:\Users\%USERNAME%\AppData\Roaming\Subversion\config 
+2

Debería añadir su adición a la respuesta de David en un comentario sobre su respuesta, una modificación de su respuesta (con un comentario que aclara la adición con él) o en su propia respuesta, no en la pregunta en sí. –

Respuesta

29

Ok, mirando el original blog post, esto es lo que desea:

svn diff --diff-cmd wm [optional-filename] 

Si quiere ver lo que está sucediendo aquí (es decir qué tipo de parámetros de las svn diff pases para el diff-cmd nominado), sólo puede utilizar svn diff --diff-cmd echo y ver lo que dice:

[~/src/gosmore-dev]$ svn diff --diff-cmd echo 
Index: gosmore.cpp 
=================================================================== 
-u -L gosmore.cpp (revision 13753) -L gosmore.cpp (working copy) .svn/text-base/gosmore.cpp.svn-base gosmore.cpp 

Algunas de las citas fueron retirados anteriormente, pero en el fondo se puede ver que svn diff pasará

-u -L "<left-label>" -L "<right-label>" <left-file> <right-file> 

en el archivo de proceso por lotes. El archivo por lotes que tiene se usa para convertir estos comandos en el formato que WinMerge entiende.

Más detalles y ejemplos sobre cómo se proporcionan todos estos trabajos en el svn book.

Para hacer su archivo por lotes el valor predeterminado para svn diff, es necesario agregar la siguiente línea en la sección [helpers] en su archivo de configuración de la subversión local (~/.subversion/config en Linux, no estoy seguro de que el archivo de configuración se encuentra en Windows) (ver este earlier SO question)

diff-cmd=wm.bat 
2

Después de crear un archivo por lotes que contiene una llamada a su programa de fusión favorito, puede configurar Subversion para utilizar siempre el archivo por lotes en Windows (sin que sea necesario el argumento --diff-cmd en cada uso) modificando la línea

# diff-cmd = diff_program (diff, gdiff, etc.) 

en el archivo C: \ Documents and Settings \ username \ Application Data \ Subversion \ config. Esta línea debe cambiarse para apuntar a su archivo por lotes. Por ejemplo:

diff-cmd = c:\bin\wm.bat 
+0

En Windows 7, esta ruta ha cambiado a c: \ Users \ username \ AppData \ Roaming \ Subversion –

7

Salida este enlace:

http://blog.tplus1.com/index.php/2007/08/29/how-to-use-vimdiff-as-the-subversion-diff-tool/

Aquí está una copia de conveniencia de soer:

Obtener este script diffwrap.sh y guardarlo en cualquier lugar .Guardé el mío en mi directorio $ HOME/bin. ¡Asegúrate de hacer que sea ejecutable! Estoy mostrando a continuación:

#!/bin/sh 
# Configure your favorite diff program here. 
DIFF="/usr/bin/vimdiff" 
# Subversion provides the paths we need as the sixth and seventh 
# parameters. 
LEFT="$6" 
RIGHT="$7" 
# Call the diff command (change the following line to make sense for 
# your merge program). 
"$DIFF" "$LEFT" "$RIGHT" 

# Return an errorcode of 0 if no differences were detected, 1 if some were. 
# Any other errorcode will be treated as fatal. 

a continuación, cambiar su archivo $HOME/.subversion/config para apuntar a esa secuencia de comandos:

[helpers] 
diff-cmd = /home/matt/bin/diffwrap.sh 

Luego entra un archivo diff!

3

Al usar Cygwin y SVN 1.7 con WinMerge, utilice este archivo de proceso por lotes como la herramienta de diferencias externa. Tuve que adaptar http://manual.winmerge.org/CommandLine.html para trabajar con las rutas de Cygwin.

En .subversion\config:

[helpers] 
diff-cmd = C:\path\to\winmergesvndiff.bat 

Contenido de winmergesvndiff.bat

@echo off 

set left=%6 
set right=%7 

REM Repeat these two lines for all drives 
set left=%left:/cygdrive/c/=c:/% 
set right=%right:/cygdrive/c/=c:/% 

REM Path to WinMerge may vary 
start "WinMerge" /B "C:\program files (x86)\winmerge\WinMergeU.exe" /e /s /ub /dl %3 /dr %5 %left% %right% 
0

Usando Cygwin, Subversion (versión de Cygwin) y WinDiff requiere cierto cuidado para hacer frente a la intolerancia de la última de las barras diagonales. Yo uso el Bash siguiente secuencia de comandos, instalado a través de ajuste de diff-cmd de SVN, para obtener los resultados deseados con 'svn diff':

arg1=$(echo $6 | sed 's/\//\\/g' | sed 's/\\cygdrive\\c/c:/') 
arg2=$(echo $7 | sed 's/\//\\/g' | sed 's/\\cygdrive\\c/c:/') 
cmd /c windiff.exe $arg1 $arg2 
2

es necesario convertir el camino hacia el estilo de Windows:

#!/bin/sh 

LEFT="$6" 
RIGHT="$7" 

RRIGHT=`cygpath.exe -pw $RIGHT` 
LLEFT=`cygpath.exe -pw $LEFT` 

/cygdrive/c/Program\ Files\ \(x86\)/WinMerge/WinMergeU.exe /e /s /ub /dl %3 /dr %5 $LLEFT $RRIGHT 
2

para Mac ::

abierto este archivo: ~/.subversion/config

hallazgo y la línea que contiene uncomment: diff-cmd (mediante la eliminación de principio #)

delante de diff-cmd, dar el nombre de la herramienta de diferencias, como en mi caso yo estaba usando Araxis Merge herramienta de diferencias, por lo que se veía así:

diff-cmd =/Aplicaciones/Araxis Merge .app/Contenidos/Utilidades/araxissvndiff

después de esto cada vez que va a ejecutar svn diff en el terminal, si se va a mostrar la diferencia de los archivos de esa herramienta

asegurarse de que no hay espacio antes y después de la palabra diff-cmd .

+0

Sin embargo, el espacio no importa. – Santhosh

2

Meld funciona realmente genial para mí. Después de la instalación, fui al archivo de configuración Subversion, sin comentar la línea diff-cmd y configurarla en la ruta cuando meld.exe está. En mi caso:

[helpers] 
### ... 
### Set diff-cmd to the absolute path of your 'diff' program. 
### This will override the compile-time default, which is to use 
### Subversion's internal diff implementation. 
diff-cmd = D:\SOFT\Meld\meld\meld.exe 
0

que tenía 3 problemas con el archivo .bat sencilla, sobre todo cuando la revisión no coincidía con el que está en el directorio de trabajo:

  • SVN puede escribir los archivos que se en comparación con un directorio temporal - luego elimínelos antes de que WinMerge tenga la oportunidad de verlos
  • svn puede recoger el archivo de una.SVN \ subdirectorio prístina, donde su nombre de archivo es una larga cadena de dígitos hexadecimales
  • WinMerge basa su sintaxis que destaca sobre las extensiones de archivo y cuando SVN utiliza un archivo temporal, que no tiene extensión

así que terminé de envolver un poco de PowerShell en el archivo .bat para evitar estos problemas:

;@echo off 
;set leftdesc=%~3 
;set rightdesc=%~5 
;set leftfile=%~6 
;set rightfile=%~7 
;Findstr -rbv ; %0 | powershell -c - 
;goto:sCode 

&{ 
    $leftExt, $rightExt = ($env:leftdesc, $env:rightdesc) -replace '.*([.]\w+).*','$1' 
    if ($env:leftfile.EndsWith($leftExt)){ 
    $leftFile = $env:leftfile 
    }else{ 
    $leftFile = Join-Path $env:temp ((Split-Path $env:leftfile -Leaf) + $leftExt) 
    Copy-Item $env:leftfile $leftFile -Force 
    } 
    if ($env:rightfile.EndsWith($rightExt)){ 
    $rightFile = $env:rightfile 
    }else{ 
    $rightFile = Join-Path $env:temp ((Split-Path $env:rightfile -Leaf) + $rightExt) 
    Copy-Item $env:rightfile $rightFile -Force 
    } 
    $descriptions = '/dl "' + $env:leftdesc + '" /dr "' + $env:rightdesc + '"' 
    $fileNames = '"' + $leftFile + '" "' + $rightFile + '"' 
    start 'C:\Program Files (x86)\WinMerge\WinMergeU.exe' ('/e /u ' +$descriptions + ' ' + $fileNames) 
} 

;:sCode 
;goto :eof 

Gracias a Walid Toumi de la envoltura.

0

Algo similar a las respuestas anteriores funcionó para mí, pero, mi configuración particular requiere un poco de personalización. Se necesitaron modificaciones para (1) representar el directorio "/ tmp" en Cygwin, y (2) asegurar que el archivo "/ tmp" permaneciera presente (de ahí que el "inicio" haya desaparecido desde el lanzamiento de Meld).

El archivo .bat continuación trabajó para mí con:

  • Cygwin (x64)
  • SVN (línea de comandos)
  • Meld
  • de Windows 10

-

@echo off 

set left=%6 
set right=%7 

REM Repeat these two lines for all drives 
set left=%left:/cygdrive/d/=d:/% 
set right=%right:/cygdrive/d/=d:/% 
set left=%left:/tmp=c:/cygwin64/tmp% 
set right=%right:/tmp=c:/cygwin64/tmp% 

"C:\program files (x86)\meld\Meld.exe" %left% %right%