上下文
我正在将旧的 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
创建所有内容,这就是我在上面显示的第一个布局中想要的。
您能否提供有关执行此迁移的建议?