如何使用svn
命令行工具从 SVN 签出中删除所有未跟踪的文件?Git 和 Hg 为此提供了clean
和purge
命令,但我在 SVN 中找不到相应的命令。
我不在乎我是否必须在此过程中恢复所有本地修改(在这种情况下,我基本上想将我的结帐恢复到原始状态)或者对跟踪文件的本地修改是否可以保持不变;任何一种情况都是可以接受的。
如何使用svn
命令行工具从 SVN 签出中删除所有未跟踪的文件?Git 和 Hg 为此提供了clean
和purge
命令,但我在 SVN 中找不到相应的命令。
我不在乎我是否必须在此过程中恢复所有本地修改(在这种情况下,我基本上想将我的结帐恢复到原始状态)或者对跟踪文件的本地修改是否可以保持不变;任何一种情况都是可以接受的。
可能有一种内置的方式,但如果是这样,我不知道。但是,类似以下内容应该可以完成这项工作:
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.9 版开始,您可以使用以下内容:
svn cleanup . --remove-unversioned
见https://subversion.apache.org/docs/release-notes/1.9.html#svn-cleanup-options
svn-clean脚本正是这样做的,尽管它确实依赖于安装 perl。它将保持本地修改不变,但会删除被忽略的文件。使用“-p”运行以预览将被删除的文件。
此命令应该完成工作,空格和所有(仅在 OSX 上尝试过):
svn status | grep '^\?' | sed 's/? *//' | xargs -I% rm -fr %