Subversion diff, включая новые файлы

У меня есть локальные изменения в проекте с открытым исходным кодом, который использует Subversion в качестве исходного элемента управления. (У меня нет доступа к фиксации в исходном репозитории проекта.)

Мое изменение добавляет файл, но этот файл не включен в вывод "svn diff". (Возможно, стоит отметить, что новый файл представляет собой двоичный, а не обычный текст.)

Как я могу сделать patch, который включает в себя новые файлы?


 $ svn st
   A      tests/foo.zip
 $ svn diff
 $

Ответ 1

Тот факт, что ваш файл двоичный, именно поэтому он не отображается. Я боюсь. Команда Subversion diff выполняет только текстовые различия/патчи (даже если Subversion внутренне может эффективно обрабатывать бинарные различия файлов между версиями).

Ответ 2

Я испытал подобное поведение с Позарем. И его ответ работал у меня лучше, чем обычная svn diff -force. Однако, если вы работаете на DOS-машине (например, через Cygwin), вам может потребоваться немного изменить его ответ. Следующий патч diff + работал для исправления моих текстовых + двоичных файлов в Cygwin с помощью -binary arg:

svn diff --force --diff-cmd /usr/bin/diff -x "-au --binary" OLD-URL NEW-URL > mybinarydiff.diff

patch -p0 --binary -i mybinarydiff.diff

Ответ 3

Существует опция -force для команды diff, но она создает неверный файл исправления для двоичных файлов на моей машине. Использование его с опцией -diff-cmd работает для меня, хотя:

svn diff --force --diff-cmd /usr/bin/diff -x -au

Я думаю, что это дает именно то, что вы хотели.

Ответ 4

Если вы создаете патч, вы можете использовать простой старый "diff" с опцией -new-file, который обрабатывает отсутствующий файл как пустой.

Обратите внимание, что синтаксис этой опции может фактически меняться в зависимости от версии простой старой версии, которую вы используете.