我有一个SVN工作目录。我在该目录中做了一些更改,它显示在svn状态中。但是有没有办法让我删除其中的所有更改,只使用命令行从主干中获取所有内容呢?


当前回答

这里没有一个答案是我想要的。这是我想到的:

# 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命令的任何命令一样,使用风险由您自己承担。

其他回答

这里没有一个答案是我想要的。这是我想到的:

# 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命令的任何命令一样,使用风险由您自己承担。

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

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

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

SVN还原将撤销您所做的任何本地更改

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