Jump to content

    
Sign in to follow this  
dvladim

Subversion diff/patch binary files

Recommended Posts

Вот проблема:

делаю svn diff --force чтобы были изменения бинарных файлов,

Если сделать svn patch файл обновляется вроде как без ошибок, но содержимое другое.

svn версии 1.8, система debian 8

$ svn st
?       s-l500.jpg
$ svn add s-l500.jpg 
A  (bin)  s-l500.jpg
$ svn st
A       s-l500.jpg
$ ll -n
итого 32
-rw-r--r-- 1 1000 1000 32031 июл 17 20:34 s-l500.jpg
$ svn diff --force > ../diff
$ svn revert s-l500.jpg 
Reverted 's-l500.jpg'
$ rm s-l500.jpg 
$ svn st
$ svn patch ../diff 
A         s-l500.jpg
$ svn st
A       s-l500.jpg
$ ll -n
итого 16
-rw-r--r-- 1 1000 1000 14082 июл 17 20:35 s-l500.jpg

Вот такие вот дела, и что делать не ясно.

Share this post


Link to post
Share on other sites
В 17.07.2019 в 20:38, dvladim сказал:

svn версии 1.8

С 1.9 что-то появилось: https://stackoverflow.com/a/38261215

Подробнее сказать не могу, потому что сам уже очень давно использую только Git.

В 17.07.2019 в 20:38, dvladim сказал:

не ясно

Попробовать дать более детализированную команду на 1.8, чтобы патч был сформирован корректно. Ну и, может быть, применить патч средствами Linux, а не SVN.

https://stackoverflow.com/a/2255846

Share this post


Link to post
Share on other sites

Итак, создал diff-ы разными способами

$ svn st
A       s-l500.jpg
$ ll -n
итого 32
-rw-r--r-- 1 1000 1000 32031 июл 22 21:05 s-l500.jpg
$ sha1sum s-l500.jpg 
92f07440c42c1ace274318e1247e3470d94c9df3  s-l500.jpg
$ svn diff --force >../d1
$ svn diff --git >../d2
$ svn diff --force --diff-cmd diff -x -au >../d3

затем очищаем рабочую копию каждый раз перед применением диффа и применяем через svn patch

$ svn revert -R ./ && rm s-l500.jpg
Reverted 's-l500.jpg'
$ svn patch ../d1
A         s-l500.jpg
$ svn st
A       s-l500.jpg
$ ll -n
итого 16
-rw-r--r-- 1 1000 1000 14082 июл 22 21:28 s-l500.jpg
$ sha1sum s-l500.jpg 
63f17812462062e6e4b8e0671caae707006c0131  s-l500.jpg
$ 
$ svn revert -R ./ && rm s-l500.jpg
Reverted 's-l500.jpg'
$ svn patch ../d2
A         s-l500.jpg
GU        s-l500.jpg
$ svn st
A       s-l500.jpg
$ ll -n
итого 0
-rw-r--r-- 1 1000 1000 0 июл 22 21:28 s-l500.jpg
$ sha1sum s-l500.jpg 
da39a3ee5e6b4b0d3255bfef95601890afd80709  s-l500.jpg
$ 
$ svn revert -R ./ && rm s-l500.jpg
Reverted 's-l500.jpg'
$ svn patch ../d3
A         s-l500.jpg
$ svn st
A       s-l500.jpg
$ ll -n
итого 4
-rw-r--r-- 1 1000 1000 167 июл 22 21:29 s-l500.jpg
$ sha1sum s-l500.jpg 
d348e07d6a8758092abe15f162011554086e3a65  s-l500.jpg

тоже самое, но другой патч

$ svn revert -R ./ && rm s-l500.jpg
Reverted 's-l500.jpg'
$ patch -p0 --binary -i ../d1
patching file s-l500.jpg
patch: **** malformed patch at line 119: \ No newline at end of file

$ svn st
$ ll -n
итого 0
$ 
$ svn revert -R ./ && rm s-l500.jpg
rm: невозможно удалить 's-l500.jpg': Нет такого файла или каталога
$ patch -p0 --binary -i ../d2
File a/s-l500.jpg: git binary diffs are not supported.
$ svn st
?       a
$ ll -n
итого 4
drwxr-xr-x 2 1000 1000 4096 июл 22 21:32 a
$ rm -r a/
$ 
$ svn revert -R ./ && rm s-l500.jpg
rm: невозможно удалить 's-l500.jpg': Нет такого файла или каталога
$ patch -p0 --binary -i ../d3
patching file s-l500.jpg
$ svn st
?       s-l500.jpg
$ ll -n
итого 32
-rw-r--r-- 1 1000 1000 32031 июл 22 21:33 s-l500.jpg
$ sha1sum s-l500.jpg 
92f07440c42c1ace274318e1247e3470d94c9df3  s-l500.jpg

Вот и получается, что через svn patch получаем битый файл, а через patch -p0 --binary теряем служебную информацию репозитария.

Share this post


Link to post
Share on other sites
1 час назад, dvladim сказал:

Вот и получается, что через svn patch получаем битый файл, а через patch -p0 --binary теряем служебную информацию репозитария.

А на 1.9 нельзя обновиться, чтобы попробовать делать патч с ключиком --git? Других вариантов, к сожалению, предложить не могу.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this