Я начинаю использовать Subversion в Linux. svn diff
дает очень загадочный вид, очень, очень недружелюбный к глазам. Как интерпретировать его вывод? И что еще более важно, есть ли способ увидеть разницу в стильном стиле vimdiff, где оба файла будут открываться бок о бок?
Как просмотреть svn diff в стиле vimdiff в svn
Ответ 1
Нашел по адресу: http://blog.tplus1.com/index.php/2007/08/29/how-to-use-vimdiff-as-the-subversion-diff-tool/
Этот пост в блоге берет сценарий непосредственно из примера внешних инструментов сравнения книги SVN:
diffwrap.sh
#!/bin/sh
# Configure your favorite diff program here.
DIFF="/usr/local/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.
Примечание: это предполагает, что ваш vimdiff
находится в /usr/local/bin
, для меня в Fedora он был в /usr/bin
. Если вы не можете найти его, запустите:
$ whereis vimdiff
Затем в ~/.subversion/config
:
[helpers]
...
diff-cmd = /home/<username>/bin/diffwrap.sh
Ответ 2
Отредактируйте файл $HOME/.subversion/config
, чтобы он содержал строку:
diff-cmd = <your favorite diff application>
Некоторые приложения diff поддерживают svn. Например, diff-cmd = meld
должен работать нормально. Однако vimdiff
является не одним из них. Причиной этого является то, что svn diff
дает файлы для сравнения как 6-й и 7-й аргументы, а не как 1-й и 2-й, как обычно. Так что большинство людей делает в этой ситуации следующее:
Создать оболочку script:
#!/bin/sh
/usr/bin/vimdiff ${6} ${7}
Сохраните его, например, в $HOME/bin/svndiffwrap.sh
Не забудьте сделать его выполнимым chmod +x $HOME/bin/svndiffwrap.sh
.
Сделать команду svn diff:
в $HOME/.subversion/config
:
diff-cmd = /home/<username>/bin/svndiffwrap.sh
Примечание. Некоторые клиенты svn не поддерживают пути, которые используют переменную среды $HOME
. Поэтому полезно указать полный путь.
Ответ 3
vimdiff <(svn diff)
<()
называется замещение процесса, которое создает псевдофайл из вывода svn diff
для vimdiff
, чтобы потреблять.
Вы можете создать псевдоним оболочки следующим образом: alias svndiff='vimdiff <(svn diff)'
PS - это самое простое решение, которое я еще не нашел; это изменило мою жизнь (относительно говоря)!
Ответ 4
VCSCommand может сделать это за вас - установите плагин, перейдите к файлу и нажмите <Leader>cv
Ответ 5
Мне нравится иметь ревизию и файл в строке состояния при использовании vimdiff с svn, поэтому я использую следующее:
svnvimdiff.sh
#!/bin/bash
/usr/bin/vim -R -d -f --nofork -n -c "let F1='${5//$'\t'/ }' | set statusline=%{F1} | let F2='${3//$'\t'/ }' | setlocal statusline=%{F2}" ${6} ${7}
объяснение:
- -R = только для чтения (мы не можем редактировать эти файлы)
- -d = режим сравнения (рядом)
- -f = передний план (пусть svn ждет)
- --nofork = также передний план (пусть SVN подождет)
- -n = пропустить файлы подкачки (нам не нужны файлы подкачки, так как они уже временные)
- -c = выполнить команду vim
- let F1 = '$ {5//$'\t '/}' (имя для всех окон с замененной вкладкой, потому что оно отображается неправильно)
- установить статусную линию =% {F1} (установить имя как глобальную статусную линию)
- let F2 = '$ {3//$'\t '/}' (имя для первого окна с замененной вкладкой, потому что оно отображается неправильно)
- setlocal statusline =% {F2} (установить строку состояния для первого окна)
Добавьте/измените diff -c md в $ HOME/.subversion/config
diff-cmd = /yourpath/svnvimdiff.sh
Или используйте его в строке:
svn diff --diff-cmd /yourpath/svnvimdiff <file>
Ответ 6
Я использую tkdiff и tkcvs для svn. Хороший вид сбоку.
Ответ 7
База каждого файла хранится в папке .svn, поэтому вы можете написать небольшой script, чтобы запустить vimdiff или mgdiff, чтобы указать путь в папке .svn, с помощью которой можно сравнить ваш файл. Это не потребует от вас команды vimdiff default diff для svn.
Ответ 8
Следуйте за этим шагом
-
Установите colordiff, например: для Ubuntu sudo apt-get установите colordiff
-
Теперь вы можете просто попробовать вывод svn diff в colordiff: svn diff -r Rev1: Rev2 file | colordiff
-
Добавьте следующий код в свой профиль bash (~/.bashrc или ~/.bash_profile) для легкого доступа.
svndiff() {svn diff "$ {@}" | colordiff}
-
исходный профиль bash.
source ~/.basrc Теперь он готов к использованию... Вы можете просто увидеть svn diff в вашем терминале наиболее эффективно.
например: svndiff