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

时间:2009-08-06 16:22:00

标签: svn

我有一个SVN工作目录。我在该目录中进行了一些更改,它显示在svn status中。但有没有办法让我删除那里的所有更改,并使用命令行从主干获取所有内容?

10 个答案:

答案 0 :(得分:253)

svn revert -R .
svn up

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

答案 1 :(得分:83)

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

恢复正常的本地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

答案 2 :(得分:19)

svn revert -R .
svn cleanup . --remove-unversioned

答案 3 :(得分:13)

如果你没有任何改变,你可以永远彻底和/或懒惰并且做... ...

rm -rf *
svn update

但是,不是真的,这样做,除非你非常确定来自nuke-from-space选项是你想要的!!这样做的好处是还可以修复所有构建残缺,临时文件以及SVN忽略的内容。

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

svn revert -R .

-R导致subversion递归并恢复当前工作目录内和下的所有内容。

答案 4 :(得分:9)

这里的答案都不是我想要的。这就是我想出的:

# 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命令是否始终格式化。使用这种毯子rm命令的任何命令都要自担风险。

答案 5 :(得分:7)

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

答案 6 :(得分:5)

您可以使用以下命令还原所有本地更改:

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

答案 7 :(得分:4)

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

svn update

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

答案 8 :(得分:1)

答案 9 :(得分:0)

如果您使用的是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"
)