使用 Subversion 回滚更改集的最佳方法是啥?

Posted

技术标签:

【中文标题】使用 Subversion 回滚更改集的最佳方法是啥?【英文标题】:What is the best way to roll-back a change set using Subversion?使用 Subversion 回滚更改集的最佳方法是什么? 【发布时间】:2008-10-16 20:49:20 【问题描述】:

我一直在使用各种源代码控制系统,但在恢复更改方面我还不是专家。鉴于这种情况,有人可以帮忙吗:

场景

鉴于修订版 #5 中引入了一个错误 修订版 #5 中更改了 3 个文件 2 个文件中的更改是导致该错误的原因 当客户发现修订版 #9 (HEAD) 版本中的错误时 然后必须将导致修订版 #5 中的错误的 2 个文件恢复到修订版 #4 从修订 #6 到 HEAD 的更改必须应用于这两个文件

我希望必须有一种方法来比较两个文件的修订 #4 和 #5,并生成一个补丁来撤消修订 #5 中的更改,然后可以将其应用于 HEAD 修订以回滚缺陷.

【问题讨论】:

了解您使用的是哪个 svn 客户端会很有帮助。是命令行 svn 吗? 【参考方案1】:

通常reverse merge 足以回滚已提交的更改...

【讨论】:

【参考方案2】:

要了解详细信息,请参阅: svn manual - Undoing Changes

正如马克所描述的,你会想要做: svn 合并 -r 5:4 文件 1 文件 2 这意味着向后合并从 4 到 5 的变化,即。撤消更改

您也可以输入: svn 合并 -c -5 文件 1 文件 2 这意味着应用在向后提交修订版 5 时发生的更改。

接下来您应该手动查看更改。

最后,您必须提交更改(以上合并仅更改了您的工作副本)。

【讨论】:

【参考方案3】:

这是一本link to svn 的书,解释了所有关于还原和历史的信息。

要进行 diff,您可以执行 svn diff -r 4:5 somefile.txt 之类的操作

【讨论】:

非常好,这正是我想要的。谢谢。【参考方案4】:

我假设您在我的回答中使用 TortoiseSVN。

我认为您的方案不会导致文件回滚,因为您仍然希望保留每个文件的历史记录。大多数时候,您要做的只是找到并修复错误,然后对该文件提交新的更改。

如果你想比较两个版本,在tortoiseSvn中很容易,右键单击文件,然后进入TortoiseSvn->显示日志。然后选择要比较的两个版本,右键单击然后比较版本。

如果你想找出 bug 的负责人,你可以使用 TortoiseSVN 中的 Blame 菜单项...这会让你知道是谁修改了每一行以及在哪个修订版本。

哦,如果您想将文件恢复到以前的版本,您可以在 TortoiseSvn->Show Log 中执行此操作,然后选择要恢复到的版本,右键单击并选择 Revert to this revision。

【讨论】:

【参考方案5】:

我会选择 EtienneT 的回答。但是在“恢复到这个版本”下面,还有一个选项“恢复这个版本的更改”。该选项将完全符合 Robert Walker 撤消修订版 #5 的更改的需要。不要忘记提交更改。

【讨论】:

【参考方案6】:

查看当前版本,然后 svn 合并 -r 5:4 文件 1 文件 2 (凭记忆,可能不完全正确)

【讨论】:

【参考方案7】:

我认为你需要先在 5:4 之间反向合并,然后恢复正确的文件

    svn merge -r 5:5 http://svn.example.com/repos/calc/trunk

    svn 恢复正确的文件

您可能最终会在 2buggy 文件中处于奇怪的状态 希望您可以手动解决。

【讨论】:

【参考方案8】:

如果您使用的是http://tortoisesvn.tigris.org/,那么这是一个相当简单的过程。只需右键单击文件并选择“日志”以获取从现在到选定的恢复之间的更改列表。然后就是将这两个文件恢复到修订版 #4 并提交更改 :)

【讨论】:

以上是关于使用 Subversion 回滚更改集的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

源代码管理最佳实践 - 定期从存储库更新工作副本

在 python 中处理大型数据集的最佳方法

如何回滚 TFS 签入?

在 C# 中为同步/异步任务添加重试/回滚机制的最佳方法是啥?

在 Java 中存储三个属性条目集的最佳方法是啥?

工匠大道svn使用总结