SVN没有看到变化

SVN没有看到变化

问题描述:

我刚刚运行了一个perl脚本来替换整个项目的另一个词的所有出现。SVN没有看到变化

即:

perl -e "s/OLD/NEW/g;" -pi $(find ./ -type f) 

我想这些改动提交颠覆,但是当我运行“SVN状态”,没有任何修改的文件出现在列表上。

使用“检查修改”在TortoiseSVN中发生同样的事情。

这个perl脚本是否绕过了某种SVN用来检查变化的方法?

您的脚本在.svn文件夹中的本地svn备份副本上进行操作。这就是svn用来比较变化的原因。


更新:较新版本的Subversion不保留本地.svn文件夹。

+1

优秀的诊断! – 2010-07-26 21:49:06

+0

哎呀!良好的捕捉......有什么方法可以在这一点上扭转这种情况? – Will 2010-07-26 21:52:25

+0

您应该再次检查项目。一旦你搞砸了这些文件,所有的赌注都没有了。 – 2010-07-26 21:53:19

它可能发生,你的Perl脚本改变了颠覆文件...

你需要做的是命令:

perl -e "s/OLD/NEW/g;" -pi $(find ./ -type f | grep -v '/\.svn/') 

grep命令是如此普遍在我的命令,通过grep的颠覆目录。

+0

你可能想看看['ack'](http://betterthangrep.com/),它知道如何为各种源控制系统做这种事情。此外,它是搜索代码的好工具。 – 2010-07-27 07:56:02

+1

我会第二次使用ack,但是如果你使用了find,那么使用find的功能找到你的更好,而不是使用grep对结果进行后期过滤。 find完全能够完全跳过.svn目录,节省了递归到它们的时间,然后用grep将它们剔除。 'find ./ -name .svn -prune -or -type f -print' – 2010-07-27 15:23:37

+0

如果某些文件名包含空格,我不认为这个命令可以正常工作。 – 2010-07-27 19:21:33