很抱歉浪费了一些空间来重申之前给出的答案 - 但这是我总是遇到麻烦的事情。
假设我已将本地文件更新为最新修订版本,即854。那么,我想获取旧版本 - 比如说851修订版的文件版本。
复制会起作用:
svn copy -r 851 svn+ssh://<repository URL>/l3toks.dtx ./l3toks.dtx
.. 不过,我懒得用grep查找repo的URL :)
更新似乎可能会起作用:
svn up -r 851 ./l3toks.dtx
... 然而,它也将本地副本标记为“最近检出”或者“在线修订版本相同”(例如在Tortoise/RabbitVCS中您会看到一个绿色的OK勾号)- 这意味着您不能执行 svn ci -m "rolled back to r 851"
:简单地因为本地的subversion
可执行程序不会注意到任何本地更改,并且不会上传任何内容到在线存储库中。
并且,如前所述,反向合并可以起作用 - 但在这种情况下,不应依赖于快捷语法; 而应明确说明:
svn merge -r HEAD:851 l3toks.dtx
--- Reverse-merging r854 through r852 into 'l3toks.dtx':
U l3toks.dtx
我必须承认 - 我永远不会理解句子“
将r854到r852反向合并到文件中”意味着“
刚刚得到了文件的r851,并覆盖了之前本地所保存的内容 - 并且它与最新在线版本不同,因此可以将其作为新的‘回滚’版本在线检查”,但我猜想(并希望 :) )这就是它的作用 :)
在此之后,可以使用svn diff
来快速确保我们已在本地获取了正确的修订版本;而且,在Tortoise / RabbitVCS中将使用红色惊叹号标记该文件(即与最新提交的版本不同),因此这次可以运行svn ci -m“回滚到r 851”
。
还要注意,如果您在反向合并后改变主意(即,无论如何您都想继续工作在最新的HEAD修订版本上,这里是854 - 在您本地回滚到851之后,但尚未提交回滚),则不应使用svn up
,因为它只会显示已经“在修订版本854处”;而应改用svn revert --recursive .
或类似的命令...
干杯!
参考:如何使用Subversion回滚更改 - Jacob Wright - Flex,AIR,PHP等。
编辑:...显然,可以通过以下方式实现与svn merge -r HEAD:851 l3toks.dtx
完全相同的效果:
svn export -r 851 l3toks.dtx
A l3toks.dtx
Export complete.