2009-10-16 2 views
13

Когда я использую 'svn diff' из командной строки, он печатает строки, которые были изменены, а также 3 неизменяемых строки до и после контекста. Я предпочитаю видеть только измененные строки без контекста. Мне не удалось определить какие-либо параметры командной строки, которые позволят мне вести себя так. Стандартные «diff» и «cvs diff» делают то, что я хочу по умолчанию. Конечно, «svn diff» может это сделать, но я чего-то не хватает. Кто-нибудь знает как?Как получить NO-контекст при использовании svn diff

ответ

17

После изучения полезной ссылки, приведенной выше, откройте короткий ответ, что svn построил -in diff не может делать то, что я хочу. Вы можете сказать ему использовать стандартную внешнюю diff, хотя и передать arg, чтобы сказать, что вы не хотите контекста. Я поставил следующий псевдоним в моем .bashrc и теперь все работает хорошо, если я использую это вместо:

alias svndiff='svn diff --diff-cmd=diff -x -U0' 
+2

'-x' - это параметр расширения для' svn diff', он вызывает токен, следующий за ним, здесь '-U0', передаваться команде diff, указанной в '--diff-cmd', здесь' diff'. – valid

2

This thread, похоже, приходит к выводу, что вы должны использовать внешнюю команду diff, чтобы контролировать количество контекста.

Я предпочитаю объединённые различия, так что мои пальцы всегда тип

svn diff -x -u 

что означает, что используется внешняя команда (GNU Diff), я думаю.

+0

Спасибо за полезную ссылку. Удивительно, что встроенный diff не может делать то, что я хочу. Мне кажется, что я нарушаю принцип Unix, в котором запрашивается наименьший результат. Использование команд -x -u дает мне те же результаты, что и нет. 'svn help diff' скажите мне, что это значения по умолчанию. Может быть, вам не нужно вводить дополнительный символ? – DaveBurns

3

Вы можете передать результаты 'svn diff' в grep и написать регулярное выражение, чтобы получить то, что вы хотите. Например, попробуйте следующее:

svn diff | grep "^[+-\]" 

Вышеуказанная команда получает вас все строки, начинающиеся с «+» или «-» или «\». (Вам нужно «\», если вы хотите увидеть различия, такие как «\ No newline в конце файла».)

+0

Это прекрасно работает, если вы хотите только измененные строки. Однако он не может выводить правильную информацию о номерах строк. Например. с 3 линиями контекста до/после, «@@ -21,7 +21,7 @@» говорит, что строка 24 была изменена. Без контекста вы увидите, что «@@ -24,1 +24,1 @@» – kamczak

4

Предложение выше по-прежнему производит контекстный формат, но с 0 строк контекста. Это до сих пор не является традиционным выходным сигналом перед доподчинением.

То, что работает для меня: svn di --diff-cmd=diff -x --normal

--normal вариант (в дифф, который поставляется с OSX) дает традиционный формат, что некоторые люди предпочитают.