【发布时间】:2014-09-17 11:04:50
【问题描述】:
上下文
我正在将旧的 CVS 存储库迁移到 SVN。我们有一个用于企业组件的存储库,另一个用于所有公司项目。对于公司项目,每个项目都计划手动迁移,我们选择使用多解决方案布局
-solution1
-branches
-
-
-
-tags
-
-
-
-trunk
-component1
-component2
相反,对于核心组件,我们选择了单方案-多项目布局
-branches
-
-
-
-
-tags
-
-
-
-trunk
-compv1
-compv2
-compv3
-tools
-utils
-etc
(不同的主要版本被视为单独的项目并进行维护)
工具
现在,由于预计核心组件的迁移是一次性事件,因此我准备了一个脚本,将所有内容迁移到专用的 SVN 存储库。根据我在其他项目中所做的,我创建了一个脚本以使用 project-name 参数启动
#!/bin/bash
PROJECT_NAME=$1
TARGET_REPO=$2
PROJECT_ROOT=/tmp/cvs_copy
sudo -u apache cvs2svn --dumpfile=/tmp/$PROJECT_NAME.dump --trunk=trunk/$PROJECT_NAME --branches=branches --tags=tags --tmpdir=/tmp/cvs2svn --encoding=windows-1252 --dry-run $PROJECT_ROOT/$PROJECT_NAME/
sudo -u apache cvs2svn --dumpfile=/tmp/$PROJECT_NAME.dump --trunk=trunk/$PROJECT_NAME --branches=branches --tags=tags --tmpdir=/tmp/cvs2svn --encoding=windows-1252 $PROJECT_ROOT/$PROJECT_NAME/
sudo -u apache svnadmin load /srv/svn/repos/phoenix/ < /tmp/$PROJECT_NAME.dump
问题
我可以成功迁移第一个项目,但是到了第二个的时候,我显然收到以下错误
svnadmin: E160020: File already exists: filesystem '70ce675a-1390-4203-9115-015d7d1d3a47', transaction '155-4b', path '/trunk'
显然 因为仔细想想,转储包含一个创建根 trunk 目录的事务,这与当前存储库布局冲突:在 T-0 上,它是空的;在T-1上,导入项目1后,包含trunk,由于trunk已经存在,无法进化到T-2。
问题
我想告诉svnadmin load,当trunk 目录存在时,它可以优雅地跳过创建它。我不是 parent-dir 标志的主人,但我认为它会在 parent-dir 下创建所有内容,这就是我在上面显示的第一个布局中想要的。
您能否提供有关执行此迁移的建议?
【问题讨论】: