是否有一个Subversion命令来重置工作副本?

是否有一个Subversion命令可以将工作副本“重置”到存储在存储库中的状态? 像git reset --hard hard (ha,hard Git reset不会删除未版本化的文件!) rm -rf wc && svn co <url> wc

更新:我没有经过简单的还原,因为这不会删除工作副本中的额外文件。 我真的想要一些与删除工作副本并重新检查一样的东西,而不必再次下载数据。 (显然,我不介意丢失所有未提交的更改。)

你可以像这样recursion地恢复:

svn revert --recursive .

没有办法(没有写一个创意脚本)去除那些不受源代码控制的东西。 我认为最接近你可以做的是迭代所有的文件,然后使用grep的结果svn list ,如果grep失败,然后删除它。

编辑 :创意脚本的解决scheme是在这里: 自动删除Subversion未版本控制的文件

所以你可以创build一个脚本,结合revert与链接的问题中的任何一个答案最适合你。

恢复跟踪的文件

 svn revert . -R 

清理未跟踪的文件

 svn status | rm -rf $(awk '/^?/{$1 = ""; print $0}') 

-rf可能会/应该看起来很吓人,但一旦明白它不会是由于这些原因:

  1. 只有完全未跟踪的目录才会匹配传递给rm的模式
  2. -rf是必需的,否则这些目录将不会被删除

要恢复干净(OP问题)

 svn revert . -R && svn status | rm -rf $(awk '/^?/{$1 = ""; print $0}') 

为了一致的易用性

将永久别名添加到.bash_aliases

 alias svn.HardReset='read -p "destroy all local changes?[y/N]" && [[ $REPLY =~ ^[yY] ]] && svn revert . -R && rm -rf $(awk -f <(echo "/^?/{print \$2}") <(svn status) ;)' 

删除本地副本中的所有内容,使用:

 rm -r your_local_svn_dir_path/* 

并使用下面的命令recursion地还原一切。

 svn revert -R your_local_svn_dir_path 

这比删除整个目录然后重新签出更快,因为文件正在从本地SVN元数据中恢复。 它甚至不需要networking连接。

 svn revert . -R 

重置一切。

 svn revert path/to/file 

为单个文件

纯Windows cmd / bat解决scheme:

 svn cleanup . svn revert -R . For /f "tokens=1,2" %%A in ('svn status --no-ignore') Do ( If [%%A]==[?] ( Call :UniDelete %%B ) Else If [%%A]==[I] Call :UniDelete %%B ) svn update . goto :eof :UniDelete delete file/dir IF EXIST "%1\*" ( RD /S /Q "%1" ) Else ( If EXIST "%1" DEL /S /F /Q "%1" ) goto :eof 

从操作系统中删除工作副本,并再次检查出来是最简单的,但显然不是一个单一的命令。

非常快速和简单,做你想要的

 svn status | awk '{if($2 !~ /(config|\.ini)/ && !system("test -e \"" $2 "\"")) {print $2; system("rm -Rf \"" $2 "\"");}}' 

/(config|.ini)/是为了我自己的目的。

对于svn命令添加–no-ignore可能是一个好主意

删除未版本化的文件并恢复任何更改:

 svn revert D:\tmp\sql -R svn cleanup D:\tmp\sql --remove-unversioned 

date:

 DD:\tmp\sql\update\abc.txt 

删除未跟踪的文件

我能够通过在bash中列出由svn st报告的所有未跟踪文件:

 echo $(svn st | grep -P "^\?" | cut -c 9-) 

如果你感觉幸运,你可以用rmreplaceecho以删除未跟踪的文件。 或者手动复制你想要删除的文件,如果你感觉不那么幸运。


(我用@ abe-voelker的回答来恢复剩下的文件: https ://stackoverflow.com/a/6204601/1695680)