проблема sed && svn

проблема sed && svn

У меня есть рабочая копия svn, в которой я выполнил следующую команду

найти ./source * -type f -exec sed "s/@version 0.5.3/@version 0.5.4/" -i {} \;

все файлы обновлены, но svn не распознает никаких изменений при выполнении одного из них

статус svn ./source

svn diff ./source

svn коммит ./source

Я также пытался написать скрипт, который должен был бы проверять $? из sed и, если все в порядке, «прикасаться» к файлу, чтобы обновить его mdate, но sed, похоже, всегда возвращает 0 -.-

что я могу сделать сейчас? -.-

решение1

Проблема заключается в вашем использовании find:

find dir1 -type f

Будет соответствовать всем файлам в структуре каталогов, включая те, что находятся внутри .svnкаталогов. Файлы в .svn— это те, которые используются для выполнения svn diffпротив. Таким образом, по сути, вы изменили все копии файлов в дереве, а не только рабочие копии.

Попробуйте следующий синтаксис:

find ./source * -type f ! -path '*/.svn/*' -exec sed "s/@version 0.5.3/@version 0.5.4/" -I {} \;

решение2

В моем случае оказалось, что я обновлял ссылку symlinc на реальный файл. Я использовал sed in-place update. Интересно, что это превращает символическую ссылку в обычный файл. Затем svn был недоволен, потому что тип "object" был изменен, конечно.

Вот как символическая ссылка изменяется на обычный файл:

user@host>ls -l txt*
-rw-rw-r-- 1 user user 90 Feb 28  2020 txtfile
lrwxrwxrwx 1 user user 7 Aug  5 11:07 txtln -> txtfile
user@host>sed -i "s/hello/mello/" txtln
user@host>ls -l txt*
-rw-rw-r-- 1 user user 90 Feb 28  2020 txtfile
-rw-rw-r-- 1 user user 90 Aug  5 11:08 txtln
user@host>

Связанный контент