
eu tenho uma cópia de trabalho do svn na qual executei o seguinte comando em
find ./source * -type f -exec sed "s/@versão 0.5.3/@versão 0.5.4/" -i {} \;
os arquivos estão todos atualizados, mas o svn não reconhece nenhuma alteração ao executar um desses
svn status ./fonte
svn diff ./source
svn commit ./source
eu também tentei escrever um script que deveria verificar o $? do sed e está tudo bem "tocar" no arquivo para atualizá-lo, mas o sed parece sempre retornar 0 -.-
O que eu posso fazer agora? -.-
Responder1
O problema está no uso de find
:
find dir1 -type f
Corresponderá a todos os arquivos na estrutura de diretórios, incluindo aqueles dentro dos .svn
diretórios. Os arquivos contidos .svn
são aqueles usados para realizar o svn diff
contra. Então, em essência, você modificou todas as cópias dos arquivos na árvore, não apenas as cópias de trabalho.
Experimente esta sintaxe:
find ./source * -type f ! -path '*/.svn/*' -exec sed "s/@version 0.5.3/@version 0.5.4/" -I {} \;
Responder2
No meu caso, descobri que eu estava atualizando um link symlinc para o arquivo real. Eu usei a atualização in-loco do sed. Curiosamente, isso transforma um link simbólico para um arquivo normal. Então o svn não ficou feliz porque o tipo de "objeto" foi alterado, é claro.
Veja como um link simbólico é alterado para um arquivo normal:
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>