如何在不丢失历史记录的情况下将subversion存储库的一部分移动到新存储库?

时间:2012-03-29 14:56:28

标签: svn migration repository

我有一个subversion存储库,目前有代码,文档和可交付成果。这变得混乱和无法管理,所以我想将存储库分成三个。

如何在不丢失历史记录的情况下将原始存储库(包含纯代码)的子部分移动到新的DocumentationDeliverables存储库中?例如:

<old_repos>\Docs
<old_repos>\Deliverables
<old_repos>\Src

...变为:

<docs_repos>
<deliverables_repos>
<src_repos>

我已经看过很多关于在存储库中移动文件夹的帖子以及其他显示如何将一个整个存储库移动到另一个存储库的帖子,但没有任何建议如何移动子集。这可能吗?

2 个答案:

答案 0 :(得分:1)

您可以使用svndumpfilter。虽然

,但那里的文档中有说明
  • 你不能(我上次尝试过)使用--deltas转储 - 它不支持。我认为--incremental虽然可以
  • 编辑所有文件的路径通常意味着仔细编辑转储文件,这很痛苦,因为它是二进制和文本的混合。我通常必须删除创建目录的前几个修订版,并修改其中一个以创建正确的新目录。

需要花费一些力气,但我已成功完成了几次。

答案 1 :(得分:1)

未尝试过,未亲自测试

你将使用svnadmin dump,svnadmin load和svndumpfilter(命令略带Unixish风格)

1创建原始仓库的完整转储:svnadmin dump . > full.dump

2-4过滤器转储并仅保留与所需子目录相关的修订:cat full.dump | svndumpfilter include DIR-PATH --drop-empty-revs --renumber-revs --skip-missing-merge-sources --preserve-revprops > DIR-PATH.dump

5-7对于每个新的空仓库:svnadmin load . --parent-dir trunk --ignore-uuid < DIR-PATH.dmp

在最糟糕的情况下,新的回购将不会/trunk/*.* data-trees,而是/trunk/DIR-PATH/*.*,这可以通过一次大动作轻松消除,并在所有

之后删除空的DIR-PATH

PS - 我刚写完文字后发现:How to move a single folder from one Subversion repository to another repository?