
Tengo una copia de trabajo svn en la que ejecuté el siguiente comando
buscar ./source * -type f -exec sed "s/@version 0.5.3/@version 0.5.4/" -i {} \;
Todos los archivos están actualizados pero svn no reconoce ningún cambio al ejecutar uno de estos.
estado svn ./fuente
diferencia svn ./fuente
confirmación svn ./fuente
También intenté escribir un script que debería verificar el valor $? desde sed y está bien "tocar" el archivo para actualizar su fecha m, pero parece que sed siempre devuelve 0 -.-
¿Qué puedo hacer ahora? -.-
Respuesta1
El problema radica en el uso de find
:
find dir1 -type f
Coincidirá con todos los archivos en la estructura del directorio, incluidos los que están dentro de los .svn
directorios. Los archivos en .svn
son los que se utilizan para realizar el svn diff
contra. Entonces, en esencia, ha modificado todas las copias de los archivos en el árbol, no solo las copias de trabajo.
Pruebe esta sintaxis:
find ./source * -type f ! -path '*/.svn/*' -exec sed "s/@version 0.5.3/@version 0.5.4/" -I {} \;
Respuesta2
En mi caso, resultó que estaba actualizando un enlace simbólico al archivo real. Utilicé la actualización local de sed. Curiosamente, esto convierte un enlace simbólico en un archivo normal. Entonces svn no estaba contento porque, por supuesto, se cambió el tipo de "objeto".
Así es como se cambia un enlace simbólico a un archivo 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>