How can I delete all unversioned/ignored files/folders in my working copy?
Solution 1:
I know this is old but in case anyone else stumbles upon it, newer versions (1.9 or later) of svn support --remove-unversioned
, e.g. svn cleanup . --remove-unversioned
.
https://subversion.apache.org/docs/release-notes/1.9.html#svn-cleanup-options
Solution 2:
svn status --no-ignore | grep '^[I?]' | cut -c 9- | while IFS= read -r f; do rm -rf "$f"; done
This has the following features:
- Both ignored and untracked files are deleted
- It works even if a file name contains whitespace (except for newline, but there's not much that can be done about that other than use the
--xml
option and parse the resulting xml output) - It works even if
svn status
prints other status characters before the file name (which it shouldn't because the files are not tracked, but just in case...) - It should work on any POSIX-compliant system
I use a shell script named svnclean
that contains the following:
#!/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
Solution 3:
Using TortoiseSVN:
- right-click on working copy folder, while holding the shift-key down
- choose "delete unversioned items"
Solution 4:
This oneliner might help you:
$ svn status | grep '^?' | awk '{print $2}' | xargs rm -rf
Use with care!
Solution 5:
Modifying Yanal-Yves Fargialla and gimpf's answers using Powershell (but not being allowed to comment on the original post by Stackoverflow):
powershell -Command "&{(svn status --no-ignore) -match '^[\?i]' -replace '^.\s+' | rm -recurse -force}
This adds the carat ("^") to specify the start of line, avoiding matching all files that contain the letter "i". Also add the flags for -recurse and -force to rm to make this command non-interactive and so usable in a script.