Reputation: 20341
I have an SVN working directory. I made some changes in that directory, and it shows in svn status
. But is there any way for me to remove all my changes in there and just get everything from the trunk using the command line?
Upvotes: 213
Views: 162290
Reputation: 919
I used a combination of other peoples' answers to come up with this solution:
svn revert -R .
svn status --no-ignore | \
grep -E '(^\?)|(^\I)' | \
sed -e 's/^. *//' | \
sed -e 's/\(.*\)/"\1"/' | \
xargs rm -rf
svn update --force
Upvotes: 91
Reputation: 164
If you are on windows, the following for loop will revert all uncommitted changes made to your workspace:
for /F "tokens=1,*" %%d in ('svn st') do (
svn revert "%%e"
)
If you want to remove all uncommitted changes and all unversioned objects, it will require 2 loops:
for /F "tokens=1,*" %%d in ('svn st') do (
svn revert "%%e"
)
for /F "tokens=1,*" %%d in ('svn st') do (
svn rm --force "%%e"
)
Upvotes: 0
Reputation: 3591
You can use the following command to revert all local changes:
svn st -q | awk '{print $2;}' | xargs svn revert
Upvotes: 5
Reputation: 13967
None of the answers here were quite what I wanted. Here's what I came up with:
# Recursively revert any locally-changed files
svn revert -R .
# Delete any other files in the sandbox (including ignored files),
# being careful to handle files with spaces in the name
svn status --no-ignore | grep '^\?' | \
perl -ne 'print "$1\n" if $_ =~ /^\S+\s+(.*)$/' | \
tr '\n' '\0' | xargs -0 rm -rf
Tested on Linux; may work in Cygwin, but relies on (I believe) a GNU-specific extension which allows xargs to split based on '\0'
instead of whitespace.
The advantage to the above command is that it does not require any network activity to reset the sandbox. You get exactly what you had before, and you lose all your changes. (disclaimer before someone blames me for this code destroying their work) ;-)
I use this script on a continuous integration system where I want to make sure a clean build is performed after running some tests.
Edit: I'm not sure this works with all versions of Subversion. It's not clear if the svn status
command is always formatted consistently. Use at your own risk, as with any command that uses such a blanket rm
command.
Upvotes: 9
Reputation: 3775
svn status | grep '^M' | sed -e 's/^.//' | xargs rm
svn update
Will remove any file which has been modified. I seem to remember having trouble with revert when files and directories may have been added.
Upvotes: 4
Reputation: 162722
If you have no changes, you can always be really thorough and/or lazy and do...
rm -rf *
svn update
But, no really, do not do that unless you are really sure that the nuke-from-space option is what you want!! This has the advantage of also nuking all build cruft, temporary files, and things that SVN ignores.
The more correct solution is to use the revert command:
svn revert -R .
The -R causes subversion to recurse and revert everything in and below the current working directory.
Upvotes: 14
Reputation: 9814
svn revert -R .
svn up
This will recursively revert the current directory and everything under it and then update to the latest version.
Upvotes: 307