我有一个SVN工作目录.我在该目录中进行了一些更改,它显示在svn status.但有没有办法让我删除我在那里的所有更改,并使用命令行从主干获取所有内容?
Mik*_*aid 265
svn revert -R .
svn up
Run Code Online (Sandbox Code Playgroud)
这将递归还原当前目录及其下的所有内容,然后更新到最新版本.
小智 87
我结合其他人的答案提出了这个解决方案:
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 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)
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递归并恢复当前工作目录中和下面的所有内容.
这里的答案都不是我想要的.这是我想出的:
# 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命令的任何命令都需要您自担风险.
您可以使用以下命令还原所有本地更改:
svn st -q | awk '{print $2;}' | xargs svn revert
Run Code Online (Sandbox Code Playgroud)