当前位置:  开发笔记 > 编程语言 > 正文

更好地恢复到文件的先前SVN修订版的方法?

如何解决《更好地恢复到文件的先前SVN修订版的方法?》经验,为你挑选了5个好方法。

我意外地将太多文件提交到SVN存储库并更改了一些我不想要的东西.(叹气.)为了将它们恢复到先前的状态,我能想到的最好的是

svn rm l3toks.dtx
svn copy -r 854 svn+ssh:///l3toks.dtx ./l3toks.dtx

哎呀!有没有更好的方法?为什么我不能写这样的东西:

svn revert -r 854 l3toks.dtx

好吧,我只使用v1.4.4,但是我浏览了1.5分支的更改列表,我看不到任何与此直接相关的内容.我错过了什么吗?


编辑:我想我不够清楚.我不认为我想要反向合并,因为那时我会失去我的变化要打!说fileA并且fileB都被修改但我只想提交fileA; 不小心打字

svn commit -m "small change"

提交这两个文件,现在我想回滚fileB.反向合并使得这项任务比我上面概述的步骤更容易(据我所知).



1> orip..:
svn merge -r 854:853 l3toks.dtx

要么

svn merge -c -854 l3toks.dtx

这两个命令是等效的.


有没有理由为什么上面的第一个选项对我来说就像一个魅力,而第二个选项并不适用于所有?
真的应该减1这是因为没有说明这两个命令之间的区别是什么.答案很差
但是,不要忘记在反向合并之后提交.我经常忘记:)
多亏了这个,只是想说明一些事情 - 比方说,我是修订版855,我想将文件还原为修订版854.如果我执行`svn merge -c -854 my.file`,然后执行`svn diff `,它似乎在854之前显示了一个修订版(即853); 只有当我执行`svm merge -c 854 myfile`(没有`-`)时,看起来myfile还原为rev 854.再次感谢,欢呼!
@sprog - 如果有什么不同,我会很高兴知道
来自`svn help merge`的@orip:"' - c M'相当于'-r :M',而'-c -M'则相反:' - r M:"".
@skybondsor也许你忘记了"-854"中的破折号?刚发生在我身上

2> luapyad..:

查看svn书籍的 " 撤消更改 "部分


鼓励链接到外部资源,但请在链接周围添加上下文,以便您的其他用户能够了解它是什么以及它为什么存在.如果目标站点无法访问或永久脱机,请始终引用重要链接的最相关部分.

3> sdaau..:

很遗憾只是在重复之前给出的答案时占用了一些空间 - 但这是我总是遇到麻烦的事情.

假设我已经将本地文件更新为最新版本,即854.然后,我想要获得一个较旧的版本 - 之前几个版本的文件版本,比如修订版851.

复制可行:

svn copy -r 851 svn+ssh:///l3toks.dtx ./l3toks.dtx

..但是,我不能为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 "rolled back to 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.


您应该总是喜欢svn导出,因为它完全符合您的要求 - 检查某个版本中的文件,而反向合并也会尝试将您的本地更改与指定的版本合并,这是一个复杂而疯狂的操作,这是如果你不注意就容易出错!

4> Igor..:

我最近不得不恢复到一个特定的版本来调试旧的版本,这就像魔法一样:

svn up -r 3340 (or what ever your desired revision number)

我不得不使用"tc"选项解决所有冲突,因为我不关心本地更改(在恢复之前检查我关心的所有内容)

要回头修改也很简单:

svn up



5> rmeador..:

您正在寻找的是"反向合并".你应该参考SVN书中关于合并功能的文档(作为luapyad,或者更确切地说是该帖子中的第一个评论者,指出).如果您正在使用Tortoise,您也可以进入日志视图并右键单击并在出错的地方选择"从此修订版还原更改".

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有