是否有一个Subversion命令来重置工作副本?
是否有一个Subversion命令可以将工作副本“重置”到存储在存储库中的状态? 像 hard git reset --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
可能会/应该看起来很吓人,但一旦明白它不会是由于这些原因:
- 只有完全未跟踪的目录才会匹配传递给
rm
的模式 -
-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-)
如果你感觉幸运,你可以用rm
replaceecho
以删除未跟踪的文件。 或者手动复制你想要删除的文件,如果你感觉不那么幸运。
(我用@ abe-voelker的回答来恢复剩下的文件: https ://stackoverflow.com/a/6204601/1695680)