SVN diff для полного файла? - PullRequest
11 голосов
/ 21 августа 2009

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

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

Справочная информация: эта разница необходима для проверки кода, для подачи на ReviewBoard

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

Решение: ?

Ответы [ 8 ]

6 голосов
/ 05 мая 2011

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

echo "" | diff -u - script.pl
2 голосов
/ 04 июля 2013

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

svn diff --old=/path/to/root/of/repo@1 --new=/path/to/file.txt

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

1 голос
/ 20 марта 2013

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

cp file1 file2
svn add file2
svn diff file2 > file1.diff
svn rm --force file2
0 голосов
/ 13 июня 2012

В некотором смысле взломать, но вы должны начать ...

Совершить все

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

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

0 голосов
/ 25 февраля 2011

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

0 голосов
/ 19 января 2011

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

Обходным решением было создать diff из нескольких последних ревизий файла, затем «Развернуть изменения» покажет вам полный файл и позволит комментировать в любом месте.

0 голосов
/ 21 августа 2009

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

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

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

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

0 голосов
/ 21 августа 2009

С макушки моей головы:

svn diff -r X-1:HEAD FILENAME@X

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

...