Jump to content

    

Subversion diff/patch binary files

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

делаю 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

На 1.9 та же история. См. выше файл ../d2

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this