Svn diff для полного файла?

Предоставлено: репозиторий SVN, каталог bin внутри него и script.pl внутри этого bin. Некоторые изменения назад, bin и script.pl были добавлены в репозиторий в одном коммите. С тех пор некоторые изменения были применены к script.pl.

Требуется: команда diff, которая вернет полный diff для script.pl от нуля до HEAD, т.е. diff со всеми добавленными строками.

Предыстория: этот diff необходим для просмотра кода, для подачи на ReviewBoard

Проблема: svn diff с -r X:HEAD (X является первой ревизией script.pl) создает разницу между первой версией и HEAD, а -r X-1:HEAD сообщает мне файл script.pl неизвестно в редакции X-1, что на самом деле правильно. Однако я не могу найти правильное решение, которое включало бы diff из пустого файла. Я также не могу разбить каталог bin, так как он был добавлен в тот же коммит, что и script.pl

Решение: ?

Ответ 1

Без временного файла:

echo "" | diff -u - script.pl

Ответ 2

Некоторые версии SVN, похоже, позволяют вам делать svn diff -r 0:HEAD file.txt, но некоторые нет. Для тех, кто этого не делает, используйте следующее:

svn diff --old=/path/to/root/of/[email protected] --new=/path/to/file.txt

Обе из них работают для любой папки/файла/файлов!

Ответ 3

Это хак, который я использую в этой ситуации:

cp file1 file2
svn add file2
svn diff file2 > file1.diff
svn rm --force file2

Ответ 4

Подождите, вы хотите разницу между текущей (HEAD) версией script.pl и пустым файлом? Для этого вам не нужен diff, потому что diff будет всего лишь строками текущего script.pl с плюсами перед ними. Увлекательный, нет?

Если вам действительно нужно это в форме diff, почему бы просто не сделать это?

$ touch EMPTYFILE  # creates a new, empty file
$ diff -u EMPTYFILE script.pl > script.pl.diff

... или локальный эквивалент, если вы застряли с менее способной системой.

Ответ 5

Я столкнулся с той же проблемой и не нашел решения.

Обходной путь состоял в том, чтобы создать diff из нескольких недавних изменений файла, затем "Expand changes" показывает вам полный файл и позволяет комментировать где угодно.

Ответ 6

Subversion не будет делать то, что вы хотите. Лучшее, что вы можете сделать, это разбить каталог нижнего уровня, существовавший при совершении bin/script.pl (предположительно, bin parent).

Ответ 7

В некотором роде взломать, но вам нужно идти...

Зафиксировать все

for file in find . -name "*.*" | grep -v .svn; do echo "" > $file; done
svn diff | sed -e 's/^-/+/g' > diffs.txt

rm -rf этот каталог и svn up обратно.

Ответ 8

С головы:

svn diff -r X-1:HEAD [email protected]

Имя файла не является уникальным ключом с течением времени, но filename @revision.