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, который обрабатывает отсутствующий файл как пустой.
Обратите внимание, что синтаксис этой опции может фактически меняться в зависимости от версии простой старой версии, которую вы используете.