Ответ 1
Без временного файла:
echo "" | diff -u - script.pl
Предоставлено: репозиторий 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
Решение: ?
Без временного файла:
echo "" | diff -u - script.pl
Некоторые версии SVN, похоже, позволяют вам делать svn diff -r 0:HEAD file.txt
, но некоторые нет. Для тех, кто этого не делает, используйте следующее:
svn diff --old=/path/to/root/of/[email protected] --new=/path/to/file.txt
Обе из них работают для любой папки/файла/файлов!
Это хак, который я использую в этой ситуации:
cp file1 file2
svn add file2
svn diff file2 > file1.diff
svn rm --force file2
Подождите, вы хотите разницу между текущей (HEAD) версией script.pl и пустым файлом? Для этого вам не нужен diff, потому что diff будет всего лишь строками текущего script.pl с плюсами перед ними. Увлекательный, нет?
Если вам действительно нужно это в форме diff, почему бы просто не сделать это?
$ touch EMPTYFILE # creates a new, empty file
$ diff -u EMPTYFILE script.pl > script.pl.diff
... или локальный эквивалент, если вы застряли с менее способной системой.
Я столкнулся с той же проблемой и не нашел решения.
Обходной путь состоял в том, чтобы создать diff из нескольких недавних изменений файла, затем "Expand changes" показывает вам полный файл и позволяет комментировать где угодно.
Subversion не будет делать то, что вы хотите. Лучшее, что вы можете сделать, это разбить каталог нижнего уровня, существовавший при совершении bin/script.pl
(предположительно, bin
parent).
В некотором роде взломать, но вам нужно идти...
Зафиксировать все
for file in find . -name "*.*" | grep -v .svn; do echo "" > $file; done
svn diff | sed -e 's/^-/+/g' > diffs.txt
rm -rf
этот каталог и svn up
обратно.
С головы:
svn diff -r X-1:HEAD [email protected]
Имя файла не является уникальным ключом с течением времени, но filename @revision.