要将 SVN 中的特定文件夹恢复到之前的状态,我当前使用以下命令:
svn rm folder
svn commit -m 'removed folder to revert to previous version'
svn co http://pathto/repo/folder@268
cd folder
rm -rf .svn //recursively if many folders
svn add folder
svn commit -am 'reverted to the previous version'
对于一个相当常见的用例来说似乎太麻烦了。我一定是做错了。你还能怎么做?
尝试
svn merge
。
假设您想从当前 HEAD(最后提交的)版本恢复到修订版
268
:
cd folder
svn up
svn merge -r HEAD:268 .
然后手动解决任何冲突(如果没有本地更改,应该没有任何冲突)并且:
svn commit -m "reverted to revision 268"
要恢复单个更改(例如修订版
666
中所做的更改):
cd folder
svn merge -c -666 .
要恢复本地更改(尚未提交):
cd folder
svn revert -R .
为什么不使用“svn merge”? 这就是为什么:“然后手动解决任何冲突[..]”
如果我知道修订版 268 中的“文件夹”包含我想要继续使用的一致数据,为什么要自动创建与可能不一致的数据的合并,然后再手动删除这些更改。它很容易出错,并且违背了我的配置管理工具的目的。
即我更喜欢最初请求的食谱,并稍加改进。如果您使用“svn导出”来获取旧版本,则不必删除.svn文件:
svn rm folder
svn commit -m 'removed folder to revert to previous version' .
svn export -r 268 http://pathto/repo/folder
svn add folder
svn commit -m 'reverted to the previous version' folder
你也可以使用
svn revert folder/*
这将恢复
folder
下的所有文件