如何删除SVN中未跟踪的文件

如何使用svn命令行工具从SVN签出中删除所有未跟踪的文件? Git和Hg为此提供了cleanpurge命令,但在SVN中找不到相应的命令。

我不在乎是否必须恢复所有在本地进行的修改(在这种情况下,我基本上希望将结帐恢复到原始状态),还是对本地修改的跟踪文件保持不变; 两种情况都可以接受。

可能有一种内置的方式,但如果是这样,我不知道它。 不过,像下面这样的东西应该可以完成这个工作:

 svn st | grep '^?' | awk '{print $2}' | xargs rm -rf 

(所有未版本控制的文件应该出现在svn st?开头的行中)

编辑( @GearoidMurphy )这个代码片段在cygwin环境下工作是非常具有挑战性的,因为xargs将windowspath斜杠当作转义序列,并且在parsing'\ r \ n'行结尾时遇到了困难,下面是我对这个完美的解决scheme有效答案:

 svn st | grep '^?' | gawk '{printf(\"%s|\", $2)}' | xargs -d "|" -n1 C:\cygwin\bin\rm -r 

svn-clean脚本正是这样做的,尽pipe它依靠安装perl。 它将完整保留本地修改,但会删除被忽略的文件。 用'-p'运行预览将被删除的文件。

这个命令应该做的工作,空间和所有(只在OSX尝试):

 svn status | grep '^\?' | sed 's/? *//' | xargs -I% rm -fr %