2013-08-09 3 views
6

Я создаю патч svn diff, однако кажется, что файлы изображений не входят в комплект. Патч содержит аналогичные строки для каждого файла изображения, как показано ниже:Включить файл изображения в svn diff patch

Index: crimgeoprofile/code/jquery/css/ui-lightness/images/animated-overlay.gif 
=================================================================== 
Cannot display: file marked as a binary type. 
svn:mime-type = application/octet-stream 
Index: crimgeoprofile/code/jquery/css/ui-lightness/images/animated-overlay.gif 
=================================================================== 
--- crimgeoprofile/code/jquery/css/ui-lightness/images/animated-overlay.gif (revision 1510040) 
+++ crimgeoprofile/code/jquery/css/ui-lightness/images/animated-overlay.gif (working copy) 

Я использую следующую команду, чтобы создать патч:

svn diff > test.diff 

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

ответ

0

Файлы изображений становятся включены в ваш дифф, как показано линиями с --- и +++, но они включены как целые файлы в патче - отчасти это связано с тем, как осмысленно отображать изменения в двоичных данных, например изображения в текстовом формате, - если только вы не захотите использовать страницы с шестнадцатеричными разностями (например, fc -b a.gif b.gif).

Итак, вам сообщили, что файлы были изменены, и вам решать, как вы хотели бы их сравнить - для файлов изображений одним из лучших сравнений значимых различий является человеческий глаз - вы не ожидаете система контроля версий, чтобы иметь возможность сказать вам «Это была фотография лысых мужчин, нахмурившихся, но теперь это симпатичный рыжий болельщик улыбается« не так ли?

+0

В настоящее время SVN не может создавать унифицированные файлы патчей с двоичными данными. Если вы проверите файл патча, как в Visual Studio, там нет двоичных данных. Обсуждается эта недостающая функция на веб-сайте Subversion: http://subversion.1072662.n5.nabble.com/Create-Apply-Patch-UTF-16-and-binary-support-td181079.html – Ron

+0

@Ron It что SVN не может создавать унифицированные файлы diff двоичных файлов, таких как файл изображения, а скорее, что унифицированный формат diff не содержит никакого способа представления различий между двумя двоичными файлами. В общем случае дельта в текстовом формате, скорее всего, будет больше, чем новая копия файла, если изменение не очень маленькое и локализованное, и даже тогда для сжатых форматов, таких как jpeg, дельта между файлами может быть большой даже для несовершеннолетнего изменение. MPEG оборачивается этим: a) используя очень специфический формат для ключевых кадров и b) используя двоичный формат для дельт. –

2

SVN не поддерживает включение двоичных файлов в diff. В качестве примечания: git поддерживает двоичные файлы. Полученный файл заплатки выглядит следующим образом:

diff --git a/bin/windows/SDL_mixer.dll b/bin/windows/SDL_mixer.dll 
new file mode 100644 
index 0000000000000000000000000000000000000000..f48ee2da696f92b66940b91b52aa53c2 
GIT binary patch 
literal 160256 
zcmd?S4SZD9)i*kmOyYopCrYBxf<%o9l`2uFL_&=TgA|RT7>j7Ev^CX7sg%wregu+E 
z26K8G$kPW}+uD|hZFwrKv_*([email protected]~XNJW(<Ug6wVlm;iDl0WbXgJ_BoSD06*UQ 
z-h1DBFF(yWXYaMwUVE*z*Is+=k13j2?MQYw94`DHi#Z&%c=BJq{Qc}d<;Xr~#Ovoc 
zRu6jXl3M4jZ(VZNLl6HbYtG!qzCU-??5yw3`oRw#^JRVK!K}IdA7nlJgRDunPtThD 

Так технически это возможно, он просто не работает с SVN. Поэтому, если вам отчаянно нужен файл патча, включая двоичные файлы, рассмотрите возможность проверки svn с помощью git. Это легко: git svn clone http://path/to/svn. Также работает аналогично svn://.... Затем вы можете создать git diff и применить этот diff к любой цели. Цель не должна быть git-репозиторием. git apply my.patch

+2

Subversion 1.9 позволяет создавать такие патчи, если вы используете 'svn diff -git' вместо простого' svn diff' –

+1

@BertHuijben, даже если '--git' отказывается от двоичных файлов. – npostavs

2

С Suversion 1.9 вы можете использовать --git флаг включать бинарное содержимое в файл заплатки, например:

svn diff https://storage/svn/project/trunk --git -c 42 > patch-42.diff 

Subversion 1.8 уже есть --git флаг, но игнорировать бинарное содержимое с ним.

Смежные вопросы