我有一个 svn 工作副本,在其中执行了以下命令
查找./source * -type f -exec sed "s/@version 0.5.3/@version 0.5.4/" -i {} \;
这些文件都已更新,但执行其中一个时 svn 无法识别任何更改
svn 状态 ./source
svn diff ./源
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
就我的情况而言,原来我正在更新指向真实文件的符号链接。我使用了 sed 就地更新。有趣的是,这会将符号链接转换为常规文件。然后 svn 不高兴,因为“对象”类型当然发生了变化。
符号链接转换为常规文件的方法如下:
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>