我有一些存储库,我需要在另一个存储库的子文件夹中转换每个存储库的内容,以保留其历史日志...我该怎么做?
最佳答案
有两种方法可以完成任务。根据Subversion服务器的分布和任务的复杂性,您可能会发现其中一个比另一个更容易或更方便。
使用svndumpfilter
工具过滤存储库历史记录
该解决方案非常棘手,因为Subversion存储库历史记录过滤基于您指定要包含在 repo 转储输出中的路径来进行。简而言之,您应该执行以下操作:
svnadmin dump
和svndumpfilter
,svnadmin load
将过滤的转储加载到另一个存储库。 您还可以使用
svnrdump
工具(在SVN 1.7和更高版本中存在)来远程执行转储和加载过程。参见 svnrdump dump
和 svnrdump load
。我强烈建议您阅读SVNBook中与该过程相关的以下文章:
svnadmin dump
svnadmin load
svnrdump dump
svnrdump load
svndumpfilter
假设您在此存储库中有存储库C:\Repositories\REPO和文件夹/trunk/abc。请参见将文件夹/trunk/abc移至另一个存储库C:\Repositories\REPO2的示例步骤。
svnadmin dump C:\Repositories\REPO > REPO.dump
svndumpfilter include /trunk/ABC < REPO.dump > filtered.dump
svnadmin load --parent-dir /loaded C:\Repositories\REPO2 < filtered.dump
就是这样!
使用
svnsync
工具进行存储库复制该解决方案也很棘手,但是与上述方法相比,使用复杂的存储库过滤可能更方便。
该方法是在配置replicate the repository with
svnsync
规则后对path-based authorization进行操作,该规则拒绝对需要从存储库历史记录中过滤掉的任何路径的读取访问。与
svndumpfilter
不同,svnsync
会将具有不可读源路径的复制操作自动转换为普通添加,这在需要过滤涉及复制操作的历史记录时非常有用。
关于svn - 将具有历史记录的SVN存储库数据作为子文件夹移动到另一个存储库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11563031/