我如何删除我的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" )