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

n17*_*911 190 svn

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

Mik*_*aid 265

svn revert -R .
svn up
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,这不适用于外部(它们似乎被忽略了)。 (2认同)

小智 87

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

恢复正常的本地SVN更改

svn revert -R .
Run Code Online (Sandbox Code Playgroud)

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

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

别忘了从SVN获取最新文件

svn update --force
Run Code Online (Sandbox Code Playgroud)


lex*_*a-b 24

svn revert -R .
svn cleanup . --remove-unversioned
Run Code Online (Sandbox Code Playgroud)

  • 如果您还想删除忽略的文件-`svn cleanup。--remove-ignored` (2认同)

bbu*_*bum 14

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

rm -rf *
svn update
Run Code Online (Sandbox Code Playgroud)

但是,不是真的,不要那样做,除非你真的确定空间核武器是你想要的!这样做的好处是还可以对所有构建残留,临时文件以及SVN忽略的内容进行核对.

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

svn revert -R .
Run Code Online (Sandbox Code Playgroud)

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

  • `svn nuke-from-space` (8认同)

mpo*_*llo 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
Run Code Online (Sandbox Code Playgroud)

在Linux上测试过; 可能在Cygwin中工作,但依赖于(我相信)GNU特定的扩展,它允许xargs基于'\0'而不是空格进行拆分.

上述命令的优点是它不需要任何网络活动来重置沙箱.你得到的确是以前的,你失去了所有的改变.(在有人责备我这个代码摧毁他们的工作之前的免责声明);-)

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

编辑:我不确定这适用于所有版本的Subversion.目前尚不清楚svn status命令是否始终格式化.使用此类一揽子rm命令的任何命令都需要您自担风险.


Sea*_*ean 7

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


NaN*_*NaN 5

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

svn st -q | awk '{print $2;}' | xargs svn revert
Run Code Online (Sandbox Code Playgroud)