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

如何删除SVN工作目录中的所有更改?,svn,Svn,我有一个SVN工作目录。我在那个目录中做了一些更改,它显示在中。但是,有没有什么方法可以让我删除其中的所有更改,然后使用命令行从主干中获取所有内容 svn revert -R . svn up 这将递归地还原当前目录及其下的所有内容,然后更新到最新版本。

我有一个SVN工作目录。我在那个目录中做了一些更改,它显示在中。但是,有没有什么方法可以让我删除其中的所有更改,然后使用命令行从主干中获取所有内容

svn revert -R .
svn up

这将递归地还原当前目录及其下的所有内容,然后更新到最新版本。

将撤消您所做的任何本地更改。

如果您没有任何更改,您可以始终非常彻底和/或懒惰,并且

rm -rf *
svn update
但是,不,真的,不要这样做,除非你真的确信太空核武器选项是你想要的!!这样做的好处是,还可以清除所有构建错误、临时文件以及SVN忽略的内容

更正确的解决方案是使用revert命令:

svn revert -R .
R导致subversion递归并还原当前工作目录中及其下的所有内容

svn status | grep '^M' | sed -e 's/^.//' | xargs rm

svn update

将删除任何已修改的文件。我似乎记得在添加文件和目录时,在还原方面遇到了问题。

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

# 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上测试;可以在Cygwin中工作,但依赖于(我相信)一个特定于GNU的扩展,该扩展允许xargs基于
'\0'
而不是空格进行拆分

上述命令的优点是,它不需要任何网络活动来重置沙箱。您完全得到了以前所拥有的,并且丢失了所有更改。(在有人指责我这段代码破坏了他们的工作之前的免责声明);-)

我在一个持续集成系统上使用这个脚本,我希望确保在运行一些测试之后执行一个干净的构建


编辑:我不确定这是否适用于所有版本的Subversion。不清楚
svn status
命令的格式是否始终一致。使用此命令时,请自行承担风险,就像任何使用此类总括命令的命令一样。

我结合其他人的答案提出了此解决方案:

恢复正常的局部SVN更改 删除任何其他更改,并支持删除带有空格等的文件/文件夹。 别忘了从SVN获取最新的文件
可以使用以下命令还原所有本地更改:

svn st -q | awk '{print $2;}' | xargs svn revert

如果您在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"
)

我经常使用这个技巧,但在SVN1.7中,元数据只存储在WC根目录中,这不再是干净的解决方案。例如,已删除的文件仍会被删除。
svn-nuke from space
请注意,这不适用于外部(它们似乎被忽略)。非常感谢Shaize,这是最优雅的sed。。。到目前为止,我已经看到了管道:)特别是要注意忽略。工作起来很有魅力。谢谢如果您还想删除被忽略的文件-
svn cleanup,则不会删除*.class文件等--remove ignored
我收到svn revert的错误消息“参数不足”
svn st -q | awk '{print $2;}' | xargs svn revert
for /F "tokens=1,*" %%d in ('svn st') do (
  svn revert "%%e"
)
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"
)
svn revert -R .
svn cleanup . --remove-unversioned