我有一个SVN工作目录。我在该目录中进行了一些更改,并显示在中svn status
。但是我有什么办法可以删除其中的所有更改,并仅使用命令行从中继中获取所有内容?
我有一个SVN工作目录。我在该目录中进行了一些更改,并显示在中svn status
。但是我有什么办法可以删除其中的所有更改,并仅使用命令行从中继中获取所有内容?
Answers:
我结合了其他人的答案来提出以下解决方案:
svn revert -R .
svn status --no-ignore | grep -E '(^\?)|(^\I)' | sed -e 's/^. *//' | sed -e 's/\(.*\)/"\1"/' | xargs rm -rf
svn update --force
svn revert -R .
svn cleanup . --remove-unversioned
svn cleanup . --remove-ignored
如果您没有任何变化,那么您始终可以做到彻底彻底和/或懒惰,然后做...
rm -rf *
svn update
但是,除非您确实确定要使用“ nuke-from-space”选项,否则不要这样做。这样做的好处是还限制了所有构建文件,临时文件以及SVN忽略的内容。
更正确的解决方案是使用revert命令:
svn revert -R .
-R导致Subversion递归并还原当前工作目录中及其下的所有内容。
svn nuke-from-space
这里没有答案完全是我想要的。这是我想出的:
# 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
命令的任何命令一样,使用时需自担风险。