我剛剛運行了一個perl腳本來替換整個項目的另一個詞的所有出現。SVN沒有看到變化
即:
perl -e "s/OLD/NEW/g;" -pi $(find ./ -type f)
我想這些改動提交顛覆,但是當我運行「SVN狀態」,沒有任何修改的文件出現在列表上。
使用「檢查修改」在TortoiseSVN中發生同樣的事情。
這個perl腳本是否繞過了某種SVN用來檢查變化的方法?
我剛剛運行了一個perl腳本來替換整個項目的另一個詞的所有出現。SVN沒有看到變化
即:
perl -e "s/OLD/NEW/g;" -pi $(find ./ -type f)
我想這些改動提交顛覆,但是當我運行「SVN狀態」,沒有任何修改的文件出現在列表上。
使用「檢查修改」在TortoiseSVN中發生同樣的事情。
這個perl腳本是否繞過了某種SVN用來檢查變化的方法?
您的腳本在.svn文件夾中的本地svn備份副本上進行操作。這就是svn用來比較變化的原因。
更新:較新版本的Subversion不保留本地.svn文件夾。
它可能發生,你的Perl腳本改變了顛覆文件...
你需要做的是命令:
perl -e "s/OLD/NEW/g;" -pi $(find ./ -type f | grep -v '/\.svn/')
這grep
命令是如此普遍在我的命令,通過grep的顛覆目錄。
你可能想看看['ack'](http://betterthangrep.com/),它知道如何爲各種源控制系統做這種事情。此外,它是搜索代碼的好工具。 – 2010-07-27 07:56:02
我會第二次使用ack,但是如果你使用了find,那麼使用find的功能找到你的更好,而不是使用grep對結果進行後期過濾。 find完全能夠完全跳過.svn目錄,節省了遞歸到它們的時間,然後用grep將它們剔除。 'find ./ -name .svn -prune -or -type f -print' – 2010-07-27 15:23:37
如果某些文件名包含空格,我不認爲這個命令可以正常工作。 – 2010-07-27 19:21:33
優秀的診斷! – 2010-07-26 21:49:06
哎呀!良好的捕捉......有什麼方法可以在這一點上扭轉這種情況? – Will 2010-07-26 21:52:25
您應該再次檢查項目。一旦你搞砸了這些文件,所有的賭注都沒有了。 – 2010-07-26 21:53:19