我有一些仓库,我需要每个人的内容转换在另一个仓库保存其历史记录的子文件夹...我怎么能这样做?
Answer 1:
有两种方法来完成任务。 根据Subversion服务器分布和复杂的任务可能比其他的更容易或更方便的找到他们中的一个。
过滤库的历史与svndumpfilter
工具
因为你指定基于路径的Subversion版本库的历史筛选的作品中包含或回购转储输出排除该解决方案是相当棘手。 总之,你应该做到以下几点:
- 与转储当前的存储库
svnadmin dump
, - 过滤出所需的库路径与转储
svndumpfilter
, - 装入过滤转储到另一个仓库
svnadmin load
。
您还可以使用svnrdump
工具(在SVN 1.7及更高版本存在的话)远程执行转储和装载过程。 见svnrdump dump
和svnrdump load
。
我强烈建议你阅读从相关进程中SVNBook下面的文章:
- 过滤库历史
-
svnadmin dump
-
svnadmin load
-
svnrdump dump
-
svnrdump load
-
svndumpfilter
假设你有仓库C:\库\回购和文件夹/主干/ ABC在这个仓库。 看到样品的步骤的文件夹/中继/ ABC移动到另一个存储库C:\库\ REPO2。
确保影响/主干/ ABC路径及其后代所有提交不影响其他任何路径。 例如,没有提交,其在同一时间将文件添加到/中继/ ABC和/或another_folder从/ another_folder的文件复制到/中继线ABC /等
创建REPO库的转储:
svnadmin dump C:\Repositories\REPO > REPO.dump
滤除从REPO.dump文件不必要的路径:
svndumpfilter include /trunk/ABC < REPO.dump > filtered.dump
在C创建空的/加载的文件夹:\库\ REPO2库。
负载突降到该文件夹:
svnadmin load --parent-dir /loaded C:\Repositories\REPO2 < filtered.dump
而已!
与库复制svnsync
工具
该解决方案也非常棘手然而复杂库过滤可以是与更方便一点比上面所描述的方法。
该方法是复制与资源库svnsync
配置后, 基于路径的授权否认读取到需要从仓库历史过滤掉任何路径访问规则。
不同于svndumpfilter
, svnsync
会自动不可读的源路径进入正常添加,如果历史涉及复制操作需要过滤这是有用的翻译复制操作。
Answer 2:
阅读您的问题后,我决定为你创造一个实用工具,将解决这个问题。 该实用程序是基于SVNKit库,这里位于https://sourceforge.net/projects/svnkitfilter
赶紧跑
$ svnadmin create svn.repo
$ svnkitfilter SRC_URL_1 file:///path/to/svn.svn --prefix prefix/for/repository1
$ svnkitfilter SRC_URL_2 file:///path/to/svn.svn --prefix prefix/for/repository2
...
$ svnkitfilter SRC_URL_N file:///path/to/svn.svn --prefix prefix/for/repositoryN