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

时间:2012-05-02 13:16:06

标签: svn version-control

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

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

4 个答案:

答案 0 :(得分:59)

可能有内置方式,但如果是这样,我不知道。但是,类似下面的内容应该可以胜任:

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

(所有未版本控制的文件都应显示在?中以svn st开头的行中。)

编辑(@GearoidMurphy 让这个片段在cygwin环境中工作是很有挑战性的,因为xargs将windows路径斜杠视为转义序列并且无法解析'\ r \ n'行结尾,下面是我对此完全有效答案的改编解决方案:

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

答案 1 :(得分:20)

svn-clean脚本正是这样做的,尽管它依赖于安装了perl。它会保留本地修改,但会删除被忽略的文件。使用'-p'运行以预览将要删除的文件。

答案 2 :(得分:16)

从1.9版开始,您可以使用以下内容:

svn cleanup . --remove-unversioned

请参见https://subversion.apache.org/docs/release-notes/1.9.html#svn-cleanup-options

答案 3 :(得分:4)

此命令应该执行作业,空格和所有操作(仅在OSX上尝试):

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