从修订版还原

时间:2009-10-30 01:20:06

标签: svn tortoisesvn

我正在使用 Tortoise SVN。

我最近检查过一堆代码(一次提交)。在3个小时的会议中,他们决定废弃一堆我的代码和该功能。我的老板希望我使用应用程序该区域的旧代码将Subversion重新安装到位。

我说有大约3-4个文件受到影响。在我提交新功能的最后一次提交中,我需要将这些文件回滚到我们检查它们之前的状态。

所以,我并不真正了解Revert Back to Revision的功能。我继续在日志中找到过去提交中这些文件的最新版本,并在日志中右键单击这些文件,然后恢复到修订版。

现在用旧版本完全替换我的本地副本吗?如果我只想转回我最后检查的功能的一部分,我是否正确地做到了这一点?

一旦我恢复该文件的本地版本,我是否会丢失所有更改?看起来它将旧版本与我的本地合并,后者有更新的代码......嗯,不完全符合我的预期。

(是的,我从subversion的文档中读到了它的页面,并且它不是非常清楚或彻底地说明了它在技术方面的意义,它们简单地说它处于最顶层并且跳过本地实际发生的事情的基础在你的工作副本中)

所以我们总结一下我做了什么:

  1. 我一度检查了一堆变化。
  2. 同事通过svn update
  3. 获取更新
  4. 我们开会,老板说我们正在剥夺这个功能
  5. 该功能大约是该修订版中提交的文件列表的3-4个文件
  6. 我想把这些特定文件放在以前的状态......有些文件将被恢复到版本x一些到y等等,因为其中一些文件的最后更改是在不同的版本号下完成的
  7. 所以我从日志开始。我找第一个文件。让我们称之为somefile1.aspx。我发现该文件的最新版本已在修订版X中签入。因此,我在该修订版的更改集中右键单击它并执行恢复返回修订版
  8. 我注意到它似乎实际上将该修订版的代码与我的本地副本合并了?我想...不确定这就是为什么我冒充因为我不明白这一点。
  9. 我为3个以上的文件执行相同操作...查找最后一次提交它们并在特定修订版中右键单击它们并对它们执行恢复修改...假设这将放置我的本地版本在那个州也是如此,甚至在当地对该文件也进行了更改
  10. 但是我对这一切感到有些不安和困惑。如果我正在接近这个权利,如果我应该使用还原,那么它实际上是在做什么。我看到它完成了合并但是什么?我只是想将这4个特定文件放回到以前的状态。不是我刚刚提交的那个完整的提交,我在这里开始提到...只是特定的文件与特定的代码区域相关...休息可以保持提交并被其他人下载。强烈的文字

3 个答案:

答案 0 :(得分:2)

假设您要还原在修订版1234中所做的更改:只需将差异从1234合并到1234-1。

在CLI中,这将是:svn merge -r 1234:1233 http://your-repo/ && svn ci

在TortoiseSVN中,获取合并对话框,“合并一系列修订”,输入1234作为要合并的修订版本,然后单击“反向合并”。然后检查你是否没有遇到任何冲突(其他人在1234之后做了更改),然后办理登机手续。然后你的HEAD修订版将没有该代码。

我不确定您是否可以对TortoiseSVN中的特定文件执行此操作。我在CLI中做到了,您也可以尝试(CLI工具,TortoiseSVN,AnkhSVN,它们都共享元数据)。

SVN仍会记得您已经编写了此代码,而这正是它的设计目标。如果没有真正的理由从SVN中删除此代码(例如,合法或勒索或其他),请保留它。

答案 1 :(得分:2)

coffeeaddict -

revertupdate在这里都是误导性的用语。你这两个都没做。你正在“反向合并”变化。

您可以将反向合并视为执行相反的更改...因此,如果修订版向文件添加了一行,则反向合并该更改将从文件中删除该行。

在TortoiseSVN中,您的方式是:

  1. 从最新的工作副本开始
  2. 拉起日志
  3. 单击包含要回滚的更改的修订
  4. 右键单击要回滚的文件,然后选择“还原此修订版本中的更改”
  5. 对每个要回滚的文件重复步骤4
  6. 您将看到这导致对工作副本中的这些文件进行本地修改。这就是你想要的;就像你通过手动编辑文件来解除更改一样。 但是您不会丢失在您回滚的修订后发生的修改中的任何更改。
  7. 解决出现的任何冲突
  8. 提交
  9. 现在,您只撤消了在该修订版中发生的更改,而不会丢弃您希望保留的任何更改。

答案 2 :(得分:1)

您可能会对我前一段非常相似的问题的回答感兴趣:

How to remove 1 revision of a folder in Subversion

基本上,您最好的行动计划可能是重新检查先前版本上的代码,然后将该代码作为最新版本提交。

如果您发现它正在将旧副本与磁盘上的版本合并,则解决此问题的最佳方法是删除本地副本,然后干净地检出文件的指定版本。一旦你得到它,你可以重新提交它。