0

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

分支 repo/A 有子分支 repo/B 和 repo/C。C 将新的 foo.c 推送/合并到 A。然后 B 拉/合并以获取 foo.c,然后推送/合并其他更改。假设 B 的修订在 pull 后从 10 更改为 11。现在分支 B 的一切都搞砸了,所以我希望 B 回到修订版 10 并认为拉动从未发生过。

因此,我查看了这些帖子,并想通过以下步骤解决问题:

  1. svnadmin 转储 $(repo/B) -r 0:10 | svnadmin 加载 $(newRepo/B)
  2. 现在我想使用原始的回购网址:

    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复制到它

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

我的问题是

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

  2. 我的解决方案中是否缺少任何内容,因为我不想再搞砸了?或者更好的方法?

谢谢

4

1 回答 1

1

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

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如果可以避免,请不要使用它。它真的是用于管理任务 - 不是像分支/合并/回滚这样的正常源代码控制操作。

于 2013-05-17T02:29:27.553 回答