如何使用svn
命令行工具从SVN结帐中删除所有未跟踪的文件?为此,Git和Hg提供clean
和purge
命令,但我在SVN中找不到相应的命令。
我不在乎是否必须在此过程中恢复所有本地修改(在这种情况下,我基本上希望将我的结帐恢复到原始状态)或者对跟踪文件的本地修改是否可以保持不变;两种情况都可以接受。
答案 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 %