Answers:
使用TortoiseSVN:
svn cleanup --remove-unversioned --remove-ignored .
svn status --no-ignore | grep '^[I?]' | cut -c 9- | while IFS= read -r f; do rm -rf "$f"; done
具有以下功能:
--xml
选项并解析所得的xml输出除外),该方法也无能为力。svn status
在文件名之前打印其他状态字符也可以使用(不应该这样做是因为未跟踪文件,但以防万一...)我使用一个名为svnclean
以下内容的shell脚本:
#!/bin/sh
# make sure this script exits with a non-zero return value if the
# current directory is not in a svn working directory
svn info >/dev/null || exit 1
svn status --no-ignore | grep '^[I?]' | cut -c 9- |
# setting IFS to the empty string ensures that any leading or
# trailing whitespace is not trimmed from the filename
while IFS= read -r f; do
# tell the user which file is being deleted. use printf
# instead of echo because different implementations of echo do
# different things if the arguments begin with hyphens or
# contain backslashes; the behavior of printf is consistent
printf '%s\n' "Deleting ${f}..."
# if rm -rf can't delete the file, something is wrong so bail
rm -rf "${f}" || exit 1
done
IFS
恢复到之前的状态。当您执行时VARNAME=value command
,value
to 的赋值VARNAME
仅在执行期间适用command
(某些例外不适用于read
)。有关更多详细信息,请参见POSIX规范和此POSIX错误报告。
我知道这是旧的,但万一其他人迷失了它,可以使用svn支持的新版本(1.9或更高版本)--remove-unversioned
,例如svn cleanup . --remove-unversioned
。
https://subversion.apache.org/docs/release-notes/1.9.html#svn-cleanup-options
svn cleanup . --remove-ignored
这个单人可能会帮助您:
$ svn status | grep '^?' | awk '{print $2}' | xargs rm -rf
小心使用!
svn status --no-ignore
很好地捕获被忽略的文件。
使用Powershell修改Yanal-Yves Fargialla和gimpf的答案(但Stackoverflow不允许对原始帖子发表评论):
powershell -Command "&{(svn status --no-ignore) -match '^[\?i]' -replace '^.\s+' | rm -recurse -force}
这将添加克拉(“ ^”)以指定行的开头,避免匹配包含字母“ i”的所有文件。还要将-recurse和-force的标志添加到rm,以使该命令不交互式,因此可以在脚本中使用。
使用powershell:
(svn status --no-ignore) -match '[?]' -replace '^.\s+' | rm
从命令行:
powershell -Command "&{(svn status --no-ignore) -match '[?]' -replace '^.\s+' | rm}"
-match '[\?i]' -replace '^.{8}'
代替方法,即使文件名以空格开头,该方法也能正常工作,并且还会删除忽略的文件。
powershell -Command "&{(svn status --no-ignore) -match '[\?i]' -replace '^.{8}' | remove-item -force -recurse}"
这个单行代码对我有用(基于理查德·汉森的答案,这令人惊讶地不适用于包含空格的文件):
svn status --no-ignore | grep '^[I?]' | cut -c 9- | xargs -d"\n" -I{} rm {}
-fr
到rm
命令:svn status --no-ignore | grep'^ [I?]'| 切-c 9- | xargs -d“ \ n” -I {} rm -fr {}
使用TortoiseSVN:
这并不是一个很好的解决方案,而是我所知道的最快方法(在Windows上)。
感谢pkh提供有关忽略文件的提示。
这类似于其他答案,但实际上得到了忽略的文件(请注意,RE中的“ I”):
rm -rf `svn status --no-ignore | grep '^[\?I]' | sed 's/^[\?I]//'`
有人说您不能从Windows命令行执行此操作。
公牛。
for /f "tokens=2 delims= " %I IN ('svn st --no-ignore ^| findstr /R "^[I?]"') DO (DEL /S /F /Q /A:H "%I" & rmdir /S /Q "%I")
只需一行即可完成,不需要单个GNU工具。:)
for /f "tokens=2 delims= " %%I IN ('svn st --no-ignore ^| findstr /R "^[I?]"') DO (DEL /S /F /Q /A:H "%%I" & rmdir /S /Q "%%I")
%%
了%
如果您使用的是Linux系统,则不能仅通过SVN命令行(尽管不确定GUI工具)删除它们,这可能会有所帮助:
http://www.guyrutenberg.com/2008/01/18/delete-unversioned-files-under-svn/
另一种(残酷的)方法是提交更改,从文件夹中删除所有内容,然后再次签出。