2009-02-20 8 views
15

A seguito di un blog, ho creato un file batch, wm.bat:Cambio di default SVN diffing strumento

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

E ho provato a chiamare

svn diff | wm 

ma che non ha funzionato. Quindi, come posso integrare WinMerge o un'utilità simile con svn diff?

Estendendosi su risposta di David sotto, cambiando l'impostazione predefinita per Windows richiede la modifica del file di configurazione situato a (per Windows   XP)

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

o (Windows   Vista)

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

Dovresti mettere la tua aggiunta alla risposta di David in un commento sulla sua risposta, una modifica alla sua risposta (con un commento che cancella l'aggiunta con lui) o nella sua risposta, non nella domanda stessa. –

risposta

29

Ok, guardando il original blog post, questo è quello che vuoi:

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

Se vuoi vedere cosa sta realmente accadendo qui (es. che tipo di parametri i svn diff passa al nominato diff-cmd), si può semplicemente utilizzare svn diff --diff-cmd echo e vedere quello che 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 

Alcune citazioni sono stati rimossi in precedenza, ma in fondo si può vedere che svn diff passerà

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

nel file batch. Il file batch che hai è usato per trasformare questi comandi nel formato che WinMerge comprende.

Ulteriori dettagli ed esempi su come funziona tutto questo sono disponibili nello svn book.

Per rendere il file batch di default per svn diff, è necessario aggiungere la seguente riga nella sezione [helpers] nel file di sovversione configurazione locale (~/.subversion/config in Linux, non sono sicuro dove il file di configurazione si trova in Windows) (vedi questo earlier SO question)

diff-cmd=wm.bat 
2

Dopo aver creato un file batch che contiene una chiamata al vostro programma preferito fusione, è possibile configurare Subversion di usare sempre il vostro file batch in Windows (senza richiedere l'argomento --diff-cmd su ogni utilizzo) modificando la riga

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

nel file C: \ Documents and Settings \ nome utente \ Dati applicazioni \ Subversion \ config. Questa riga deve essere cambiata in modo che punti al file batch. Per esempio:

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

In Windows 7, questo percorso è cambiato in c: \ Users \ nomeutente \ AppData \ Roaming \ Subversion –

7

controlla questo link:

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

Ecco una copia per convienience di SOER:

Ottenere questo script diffwrap.sh e salvarlo ovunque .Ho salvato il mio nella mia directory $ HOME/bin $. Assicurati di rendere eseguibile! Sto mostrando qui sotto:

#!/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. 

quindi modificare il file $HOME/.subversion/config per puntare a quello script:

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

Poi vai diff un file!

3

Quando si utilizza Cygwin e SVN 1.7 con WinMerge, utilizzare questo file batch come strumento di diffusione esterno. Ho dovuto adattare http://manual.winmerge.org/CommandLine.html per lavorare con i percorsi Cygwin.

In .subversion\config:

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

Contenuto del 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

Utilizzando Cygwin, Subversion (la versione di Cygwin) e WinDiff richiede una certa cura per affrontare l'intolleranza del slash di quest'ultimo. Io uso il seguente Bash sceneggiatura, installato tramite impostazione diff-cmd di svn, per ottenere i risultati desiderati 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

è necessario convertire il percorso di stile di 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

per Mac ::

aperto questo file:/.subversion/config

ritrovamento e la linea di rimuovere il commento che contiene ~: diff-cmd (rimuovendo # dall'inizio)

davanti diff-cmd, dare il nome dello strumento diff, come nel mio caso stavo usando Araxis Merge strumento diff, in modo che si presentava così:

diff-cmd =/Applications/Araxis Merge .app/Contents/Utilities/araxissvndiff

dopo questo ogni volta che verrà eseguito svn diff sul terminale, se mostrerà differenza dei file in tale strumento

assicurarsi che non v'è alcun spazio prima e dopo la parola diff-cmd .

+0

Lo spazio non ha importanza. – Santhosh

2

Meld funziona davvero alla grande per me. Dopo l'installazione, sono passato al file di configurazione Subversion, senza commentare la riga diff-cmd e impostandolo sul percorso quando è meld.exe. Nel mio 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

Ho avuto 3 problemi con il semplice file .bat, soprattutto quando la revisione non corrisponde quello nella directory di lavoro:

  • svn può scrivere i file per essere confrontato con una directory temporanea - quindi cancellarli prima che WinMerge abbia la possibilità di guardarli
  • svn può raccogliere il file da un file.svn \ sottodirectory incontaminata, dove il suo nome è una lunga stringa di cifre esadecimali
  • WinMerge basa la sua evidenziazione della sintassi sulle estensioni dei file e quando svn utilizza un file temporaneo, non ha estensione

così ho finito per avvolgimento un po 'di PowerShell nel file .bat per aggirare questi problemi:

;@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 

Grazie alla Walid Toumi per il wrapper.

0

Qualcosa di simile alle risposte di cui sopra ha funzionato per me, ma la mia configurazione particolare richiedeva un po 'di personalizzazione. Le modifiche per me erano necessarie per (1) tenere conto della directory "/ tmp" in Cygwin, e (2) assicurarsi che il file "/ tmp" sia rimasto presente (da qui il "start" è andato dal lancio di Meld).

Il sotto file .bat ha funzionato per me con:

  • Cygwin (x64)
  • SVN (riga di comando)
  • Meld
  • di 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%