我如何删除我的SVN工作目录中的所有更改?

我有一个SVN的工作目录。 我在那个目录中做了一些改变,并且以svn status显示。 但是有没有什么方法可以删除我的所有更改,并使用命令行从干线中获取所有内容?

 svn revert -R . svn up 

这将recursion地恢复当前目录及其下的所有内容,然后更新到最新版本。

我用其他人的答案组合来提出这个解决scheme:

恢复正常的本地SVN更改

 svn revert -R . 

删除任何其他更改,并支持删除空格等文件/文件夹

 svn status --no-ignore | grep -E '(^\?)|(^\I)' | sed -e 's/^. *//' | sed -e 's/\(.*\)/"\1"/' | xargs rm -rf 

不要忘记从SVN获取最新的文件

 svn update --force 

如果你没有变化,你可以永远彻底和/或懒惰,做…

 rm -rf * svn update 

但是,不,真的这样做,除非你确定核空间的select是你想要的! 这样做的好处还在于能够构build所有构build的cruft,临时文件以及SVN忽略的内容。

更正确的解决scheme是使用恢复命令:

 svn revert -R . 

-R引起颠覆操作,恢复和还原当前工作目录下的所有内容。

这里的答案都不是我想要的。 以下是我想到的:

 # 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 

在Linux上testing; 可以在Cygwin中工作,但依赖于(我相信)GNU特定的扩展,它允许xargs基于'\0'而不是空白分割。

上述命令的优点是不需要任何networking活动来重置沙箱。 你得到了你以前的东西,你失去了所有的变化 。 (有人责怪我这个代码摧毁他们的工作之前的免责声明);-)

我在一个持续集成系统上使用这个脚本,我想在运行一些testing之后确保执行一个干净的构build。

编辑 :我不知道这适用于所有版本的Subversion。 目前还不清楚svn status命令是否始终格式化。 与使用这样一个rm命令的命令一样,使用风险自负。

svn恢复将撤消您所做的任何本地更改

您可以使用以下命令恢复所有本地更改:

 svn st -q | awk '{print $2;}' | xargs svn revert 
 svn status | grep '^M' | sed -e 's/^.//' | xargs rm svn update 

将删除任何已被修改的文件。 我似乎记得在添加文件和目录时遇到了恢复问题。

svn恢复

如果您在Windows上,以下for循环将恢复对工作区所做的所有未提交的更改:

 for /F "tokens=1,*" %%d in ('svn st') do ( svn revert "%%e" ) 

如果要删除所有未提交的更改和所有未版本控制的对象,则需要2个循环:

 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" )