0

我必须从 svn 历史记录中删除一个分支。通常我会使用

svnadmin dump /path/to/repo |svndumpfilter --drop-empty-revs --renumber-revs exclude /branches/bad_branch 

然而,这个分支不仅被创建,而且被移动然后被删除,并且转储脚本无法处理下游信息,并带有如下消息:无效的复制源路径'/branches/bad_branch'

所以我想有两种方法来解决这个问题

  1. 只保留历史的最后几个修订,并将当前存储库作为存档放在网络上

  2. 转储到创建“bad_branch”的修订版,并将其余更改作为补丁应用,因此丢失了一些最近提交的历史记录。

有没有更好、更清洁的方法来处理这个问题?

4

1 回答 1

2

你的数字 2 的第一部分将起作用。所以是的,创建一个转储到引入有问题的分支的位置,并用它创建一个新的存储库。然后仍然使用 svnadmin dump 和 --incremental 选项,转储坏分支修订之间的所有好的修订。下面是增量转储命令的示例:

svnadmin dump /path/to/repo --incremental -r 1234:2345

继续将这些增量转储应用到新存储库。这应该会生成一个存储库,而不会出现令人讨厌的错误分支创建、移动和提交,并保留所有历史记录,以保存那些如您所建议的补丁会破坏的良好修订。

根据坏分支有多少修订,这是很多工作。这也是目前使用 1.6.x 版本或更早版本的 Subversion 执行此操作的唯一方法。

Now here's the caveat. If there are commit messages in the good revisions that have reference to revision numbers, they will be off. This won't be to bad if there are a limited few of them, but could be tedious to correct if there are many.

于 2010-03-31T15:46:06.383 回答