在SVN中,如何回滚到先前的修订而不是合并

时间:2013-05-17 02:10:38

标签: svn rollback

我见过其他类似的帖子和答案。但我的情况更受限制如下:

分支回购/ A有子分行回购/ B和回购/ C. C将新的foo.c推送/合并到A.然后B拉/合并以获取foo.c然后推送/合并其他更改。让我们说B的修正在拉动之后从10变为11。现在一切都搞砸了B分支,所以我希望B回到第10版,并且从未发生过拉动。

所以我查看了这些帖子,并通过以下步骤找出解决问题的方法:

  1. svnadmin dump $(repo / B)-r 0:10 | svnadmin加载$(newRepo / B)
  2. 现在我想使用原始的repo url:

    2.1)备份以防止任何搞乱:svnadmin copy $(repo / B)$(repo / B_backup)

    2.2)复制新:svnadmin copy $(newRepo / B)$(repo / B);

  3. 现在我希望UUID是相同的,我没有svnadmin setuuid,因为svn版本是1.4。所以:

    3.1)在步骤1之前,svn info $(repo / B)记录原始UUID

    3.2)在第2步之后,在某处打开$(repo / B)的日志,然后将原始UUID复制到它

  4. 现在$(repo / B)有修订版10和相同的UUID。

    我的问题是

    1. 完成所有这些后,分支A和C也会改变吗?

    2. 我的解决方案中是否有任何遗漏因为我不想再次搞砸了?还是更好的方法呢?

    3. 谢谢

1 个答案:

答案 0 :(得分:1)

不应使用svnadmin转储和恢复整个仓库(!),而应简单地删除/复制子树:

C:\>svn delete -m "this version went bad" svn://server/repo/B

Committed revision 12.

C:\>svn copy -m "restore good version" svn://server/repo/B@10 svn://server/repo/B

Committed revision 13.

一般情况下,如果可以避免,请不要使用svnadmin。它实际上适用于管理任务 - 而不是正常的源控制操作,如分支/合并/回滚。