51

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

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

4

4 回答 4

65

可能有一种内置的方式,但如果是这样,我不知道。但是,类似以下内容应该可以完成这项工作:

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
于 2012-05-02T13:19:47.623 回答
41

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

svn cleanup . --remove-unversioned

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

于 2018-09-12T22:16:29.213 回答
20

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

于 2012-05-02T14:57:52.153 回答
4

此命令应该完成工作,空格和所有(仅在 OSX 上尝试过):

svn status | grep '^\?' | sed 's/? *//' | xargs -I%  rm -fr %
于 2014-09-15T07:56:36.720 回答