Svn diff для вывода всех строк из файлов - PullRequest
12 голосов
/ 02 ноября 2011

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

Кстати, яна AIX 5.3 с использованием SVN 1.6.17.

Пример: сравнение различий между ревизией 21 и 22 моего файла "test_file"

% svn cat -r21 test_file 
My Test File

line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
line 9

% svn cat -r22 test_file
My Test File

line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
line 9

added after 1
added after 2
added after 3

% svn diff -r21:22 test_file
Index: test_file
===================================================================
--- test_file   (revision 21)
+++ test_file   (revision 22)
@@ -9,3 +9,7 @@
 line 7
 line 8
 line 9
+
+added after 1
+added after 2
+added after 3

Теперь этот вывод показывает различия в двух ревизиях, но не все строки файла есть, он показывает только предыдущие 3.

Так что на самом деле мой вопрос, как я могу получить эти строки в выводе?

Есть ли какой-тоНастройки конфигурации SVN diff?Я понимаю, что могу использовать внешние инструменты сравнения для SVN, но какой из них дает мне вывод, который я хотел бы?Я хочу попытаться избежать установки каких-либо инструментов сравнения, так как я нахожусь в корпоративной сети.

Дополнительное замечание: пока что 'sdiff' с его сгенерированными 2 столбцами, кажется, ближе всего к моему ответу,но в идеале я хотел бы получить файл с одним столбцом, в котором «+» и «-» показывают добавленные / удаленные строки

Заранее благодарен за любую помощь!=)

Ответы [ 2 ]

16 голосов
/ 02 ноября 2011

Да, вы можете использовать внешний diff для этого. Я обычно делаю это по команде:

svn diff --diff-cmd diff -x "-U30" 

Здесь -U30 - это унифицированный размер контекста. Вы должны сделать его достаточно большим, чтобы включить все строки из файла. Например, если ваш самый длинный файл имеет 1000 строк, вы должны использовать -U1000.

6 голосов
/ 02 ноября 2011

Возможно, следующее близко к тому, что вы хотите:

Сначала создайте скрипт diff, который будет использовать аргументы, полученные из svn соответствующим образом:

#!/bin/sh
# file : /usr/local/bin/mydiff

# assumes less that 10,000 lines per file
/usr/bin/diff -U10000 $6 $7

А затем diff с svn:

svn diff --diff-cmd /usr/local/bin/mydiff

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

...