2009-02-20 6 views
15

Po bloga, stworzyłem plik wsadowy, wm.bat:Zmień domyślne SVN diffing narzędzie

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

Próbowałem nazywając

svn diff | wm 

ale to nie działa. Jak więc zintegrować WinMerge lub podobne narzędzie z svn diff?

Rozszerzenie na odpowiedź Dawida poniżej, zmieniając domyślny dla Windows wymaga edycji pliku konfiguracyjnego znajdującego się (dla Windows   XP)

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

lub (Windows   Vista)

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

Powinieneś umieścić swój dodatek do odpowiedzi Dawida w komentarzu do jego odpowiedzi, edycji jego odpowiedzi (z komentarzem czyszczenie z nim dodatkiem) lub w swojej odpowiedzi, a nie w samym pytaniu. –

Odpowiedz

29

Ok, patrząc na original blog post, to jest to, czego chcesz:

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

Jeśli chcesz zobaczyć, co się tutaj dzieje (np. jakie parametry te svn diff przechodzi do wyznaczonego diff-cmd), można po prostu użyć svn diff --diff-cmd echo i zobaczyć, co jest napisane:

[~/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 

Niektóre cytaty zostały usunięte powyżej, ale w zasadzie można zobaczyć, że svn diff minie

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

do pliku wsadowego. Plik wsadowy, który posiadasz, służy do przekształcenia tych poleceń w format zrozumiały dla WinMerge.

Więcej informacji i przykładów na temat tego, jak to wszystko działa, można uzyskać pod numerem svn book.

Aby złożyć swoją partię domyślne dla svn diff, trzeba dodać następującą linię w sekcji [helpers] w lokalnym pliku konfiguracyjnym Subversion (~/.subversion/config w Linuksie, nie jestem pewien, gdzie znajduje się plik konfiguracyjny znajduje się w systemie Windows) (zobacz ten earlier SO question)

diff-cmd=wm.bat 
2

Po utworzeniu pliku wsadowego zawierającego wezwanie do swojego ulubionego programu scalania można skonfigurować Subversion, aby zawsze używać plik wsadowy w Windows (bez konieczności argument --diff-cmd na każde użycie), modyfikując linię

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

w pliku C: \ Documents and Settings \ nazwa użytkownika \ Dane aplikacji \ Subversion \ config. Ta linia powinna zostać zmieniona tak, aby wskazywała na twój plik wsadowy. Na przykład:

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

W systemie Windows 7 ścieżka ta została zmieniona na c: \ Users \ nazwa_użytkownika \ AppData \ Roaming \ Subversion –

7

Wyjazd ten link:

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

Oto kopia dla convienience SOER za:

Pobierz ten skrypt diffwrap.sh i zapisać go w dowolnym miejscu .Uratowałem mój w moim katalogu $ HOME/bin. Upewnij się, że wykonujesz ! Ja pokazano go poniżej:

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

Następnie zmień plik $HOME/.subversion/config wskazać w tym skrypcie:

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

Następnie przejdź diff pliku!

3

Podczas korzystania z Cygwin i SVN 1.7 z WinMerge, użyj tego pliku wsadowego jako zewnętrznego narzędzia do porównywania. Musiałem dostosować http://manual.winmerge.org/CommandLine.html do pracy ze ścieżkami Cygwin.

W .subversion\config:

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

Zawartość 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

Korzystanie Cygwin, Subversion (wersja Cygwin) i WinDiff wymaga opieki do czynienia z tego ostatniego nietolerancji ukośniki. Używam następujący Bash skrypt, zainstalowany poprzez ustawienie Diff-cmd SVN, w celu uzyskania pożądanych wyników z 'diff svn':

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

trzeba przekonwertować ścieżkę do stylu systemu 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

dla Mac ::

otworzyć ten plik: ~/.subversion/config

znaleźć i odkomentować wiersz zawierający: diff-cmd (usuwająC# od początku)

przed różnicowych cmd, podać nazwę narzędzia diff, jak w moim przypadku używałem Araxis scalić diff narzędzie, więc wyglądało to tak:

różnicowych cmd =/Applications/Araxis Merge .app/Contents/Użytkowe/araxissvndiff

po tym, kiedy będzie działać svn diff na terminalu, jeśli pokaże różnicę plików w tym narzędziu

upewnić, nie ma miejsca przed i po słowie diff-cmd .

+0

Przestrzeń nie ma znaczenia. – Santhosh

2

Meld działa bardzo dobrze dla mnie. Po instalacji przeszedłem do pliku konfiguracyjnego Subversion, odkomentowałem linię diff-cmd i ustawiłem ją na ścieżkę, gdy meld.exe jest. W moim przypadku:

[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

Miałem 3 problemy z prostego pliku .bat, zwłaszcza, gdy zmiana nie pasuje do jednego w katalogu roboczym:

  • svn może zapisywać pliki do w porównaniu do katalogu tymczasowego - następnie usuń je, zanim WinMerge ma szansę na ich obejrzenie.
  • svn może pobrać plik z pliku.svn \ podkatalog nietknięta, gdzie jego nazwa pliku jest długi ciąg cyfr hex
  • WinMerge opiera swoje podświetlanie składni na rozszerzeniach i kiedy svn używa pliku tymczasowego, to nie ma rozszerzenia

więc skończyło się opakowanie trochę PowerShell do pliku .bat w celu obejścia tych problemów:

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

Dzięki Walid Toumi do owinięcia.

0

Coś podobnego do powyższych odpowiedzi sprawdziło się, ale moja konfiguracja wymagała nieco spersonalizowania. Modyfikacje były potrzebne dla (1) konta dla katalogu "/ tmp" w Cygwin i (2) zapewnienia, że ​​plik "/ tmp" pozostał obecny (stąd "start" zniknął z uruchomienia Melda).

Poniższy plik .bat pracował dla mnie:

  • Cygwin (64)
  • SVN (wiersz poleceń)
  • Meld
  • systemu 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%