Изменить по умолчанию SVN diffing tool - PullRequest
16 голосов
/ 20 февраля 2009

После блога я создал командный файл wm.bat:

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

И я попытался позвонить

svn diff | wm

но это не сработало. Так как мне интегрировать WinMerge или аналогичную утилиту с svn diff?

В дополнение к ответу Дэвида, приведенному ниже, изменение значения по умолчанию для Windows требует редактирования файла конфигурации, расположенного в (для Windows XP)

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

или (Windows Vista)

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

Ответы [ 10 ]

30 голосов
/ 20 февраля 2009

Хорошо, посмотрите на оригинальное сообщение в блоге , вот что вы хотите:

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

Если вы хотите увидеть, что на самом деле здесь происходит (то есть, какие параметры svn diff передает назначенному diff-cmd), вы можете просто использовать svn diff --diff-cmd echo и посмотреть, что там написано:

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

Некоторые цитаты были удалены выше, но в основном вы можете видеть, что svn diff пройдет

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

в ваш командный файл. Пакетный файл, который у вас есть, используется для преобразования этих команд в формат, понятный WinMerge.

Более подробная информация и примеры того, как все это работает, представлены в svn book .

Чтобы сделать ваш пакетный файл по умолчанию для svn diff, вам нужно добавить следующую строку в раздел [helpers] в вашем локальном файле конфигурации subversion (~/.subversion/config в Linux, я не уверен, где находится файл конфигурации находится в Windows) (см. этот ранее ТАК вопрос )

diff-cmd=wm.bat
8 голосов
/ 24 августа 2010

Проверить эту ссылку:

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

Вот копия для удобства SOER:

Получите этот скрипт diffwrap.sh и сохраните его где угодно. Я спас мой в моем Каталог $ HOME / bin. Не забудьте сделать это исполняемый файл! Я показываю это ниже:

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

Затем измените файл $HOME/.subversion/config, указав на этот скрипт:

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

Тогда идите в другой файл!

3 голосов
/ 20 января 2016

для Mac ::

открыть этот файл: ~ / .subversion / config

найти и раскомментировать строку, содержащую: diff-cmd (удалив # из начала)

перед diff-cmd, назовите имя инструмента diff, как в моем случае я использовал инструмент diff для слияния araxis, так что это выглядело так:

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

После этого всякий раз, когда вы будете запускать svn diff на терминале, if покажет разницу файлов в этом инструменте

убедитесь, что нет пробела до и после слова diff-cmd.

3 голосов
/ 28 декабря 2011

При использовании Cygwin и SVN 1.7 с WinMerge используйте этот пакетный файл в качестве внешнего инструмента сравнения. Мне пришлось адаптировать http://manual.winmerge.org/CommandLine.html для работы с путями Cygwin.

В .subversion\config:

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

Содержание 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%
2 голосов
/ 06 октября 2016

Мелд прекрасно работает для меня. После установки я перешел к файлу конфигурации Subversion, раскомментировал строку diff-cmd и установил ее в путь, когда meld.exe есть. В моем случае:

[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
2 голосов
/ 22 ноября 2013

Вам необходимо преобразовать путь в стиль 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 голосов
/ 16 апреля 2009

После создания пакетного файла, содержащего вызов вашей любимой программы слияния, вы можете настроить Subversion на постоянное использование вашего пакетного файла в Windows (не требуя аргумента --diff-cmd при каждом использовании), изменив строку

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

в файле C: \ Documents and Settings \ имя пользователя \ Application Data \ Subversion \ config. Эта строка должна быть изменена, чтобы указать на ваш пакетный файл. Например:

diff-cmd = c:\bin\wm.bat
0 голосов
/ 11 декабря 2017

Что-то похожее на приведенные выше ответы работало для меня, но моя конкретная настройка требовала небольшой настройки. Мне потребовались модификации для (1) учета каталога «/ tmp» в Cygwin и (2) обеспечения сохранения файла «/ tmp» (следовательно, «запуск» пропущен после запуска Meld).

Приведенный ниже файл .bat работал для меня с:

  • Cygwin (x64)
  • SVN (командная строка)
  • Meld
  • 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%
0 голосов
/ 20 декабря 2016

У меня было 3 проблемы с простым файлом .bat, особенно когда ревизия не совпадала с ревизией в рабочем каталоге:

  • svn может записать файлы для сравнения во временный каталог - затем удалите их, прежде чем WinMerge сможет их просмотреть
  • svn может получить файл из подкаталога .svn \ pristine, где его имя файла представляет собой длинную строку шестнадцатеричных цифр
  • WinMerge основывает подсветку синтаксиса на расширениях файлов, и когда svn использует временный файл, он не имеет расширения

Итак, я обернул небольшой PowerShell в файл .bat, чтобы обойти следующие проблемы:

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

Спасибо Валиду Туми за упаковку.

0 голосов
/ 15 февраля 2013

Использование Cygwin , Subversion (версия Cygwin) и WinDiff требует некоторой осторожности, чтобы справиться с непереносимостью последнего слеша. Я использую следующий скрипт Bash , установленный с помощью параметра diff-cmd в svn, чтобы получить желаемые результаты с помощью '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
...