使用svnsync一次性转换存储库安全吗?

我有任务提取一个Subversion(1.6)存储库的子目录,并将其放入一个新的自己的存储库。

出于几个原因,我想使用svnsync将子目录复制到新的存储库中。 我现在想确保这是安全的,因为SVNBook说( 颠覆1.5 )

svnsync对镜像库中所做的更改非常敏感,这些更改并非作为镜像操作的一部分。 为防止发生这种情况,最好是svnsync进程是唯一允许修改镜像库的进程。

和( 颠覆1.6 )

警告

请勿修改镜像存储库,以使其版本历史logging与其所镜像的存储库的版本历史logging不同。 该镜像存储库上唯一发生的提交和修改属性修改应该是由svnsync工具执行的。

我假设这是有效的,如果你想使用svnsync实际保持镜像最新。

我们的用例是

  1. svnsync存储库A的一个子目录到存储库B.
  2. 使存储库的子目录A只读(仅用于存档目的)
  3. 进一步提交存储库B上的内容

任何人都可以确认这个用例是可行的吗?

在这个位置上,我总是更喜欢使用dump-> filter-> load方法来完成这种任务,因为它是最干净的路线。 (虽然我意识到这是相当耗时的大型仓库)。 你的情况有什么可以排除这个吗?

也就是说,在同步之后,你将会得到一个完整的function库,所以它应该可以工作。 为了彻底rest一下,在第一次同步之后,针对您的镜像仓库执行以下操作:

svnlook pl -v --revprop -r0 <path to repo root> 

您将看到svnsync init命令创build的三个svn:sync …属性。 我build议删除它们,然后再使其可写。 我不认为这是绝对必要的,但是它应该防止意外事件发生(例如在两个存储库分开后重新同步)。

我仍然推dump-> filter-> load作为正确的路线,虽然…(哦,并标记旧的子目录,然后从头删除它)。

由于我不得不调整目标资源库中的目录,所以我最终做了这个(旧的repo有一个/ SOME / DIR /的path前缀,我想摆脱):

  • 初始化和同步: svnsync init [new repo URL] [old repo URL]
  • svnsync sync [new repo URL]
  • 转储用于过滤的新存储库: svnadmin dump [new repo PATH] >REPO.dump
  • 从存储path删除前缀/ SOME / DIR: svndumptool.py merge -i REPO.dump -s '^SOME\/DIR\/' '' -x SOME -x SOME/DIR -o REPO_filtered.dump
  • 重新导入存储库: mv [new repo PATH] [away]
  • svnadmin create [new repo PATH]
  • svnadmin load --force-uuid [new repo PATH] <REPO_filtered.dump