刚开始在SVN上建立项目时,把工程代码导入到了版本库的根目录,没有放在trunk里,当时没有多想这个问题。现在项目分支越来越多了,发现没有tag或者branch,真是非常麻烦,所以得想办法把已经使用了近两个月的版本库移动到trunk里。
首先尝试使用svn客户端的move或者copy命令,发现它不能完全把已有的log拷贝过来,并且增加了额外的版本记录,达不到一个正常使用的版本库的效果。然后,尝试在svn服务器,使用svnadmin的相关命令完成了整个版本库的移动,具体操作如下:
1.将需要移动的版本库完整地导出为一个单独文件
命令:svnadmin dump local_old_repositories_path > dumpfile_path
导出来的文件是二进制格式,一般的非二进制处理方式的文档编辑器打开、保存后,会破坏格式,导致后续导入时某些提交校验出错。如果仅是完整移动版本库,则不需要编辑dump文件,直接在后面load导入即可。但是想修改其中的字段,建议使用WinHex以16进制方式编辑。根据我现在的需求,需要把dump文件里的路径信息都改成trunk/下,直接用替换的方式修改”Node-path: “部分。
2.重新创建一个新的版本库
命令:svnadmin create new_repositories_path
创建时,如果dump文件里已经有创建branch、tag、trunk文件夹动作,那这次就不需要重复创建,否则导入时会冲突。
创建时,如果dump文件里已经有创建branch、tag、trunk文件夹动作,那这次就不需要重复创建,否则导入时会冲突。
3.将之前的dump文件导入到新的版本库
命令:svnadmin load new_repositories_path < dumpfile_path
如果dump文件没有问题,那导入会非常顺利。在我们之前的版本库中,有几次删除添加的提交动作,不是以相对路径提交的,load时报路径出错。再次修改dump文件,把涉及到绝对路径的地方,修改成trunk目录下,即可解决该错误。
如果dump文件没有问题,那导入会非常顺利。在我们之前的版本库中,有几次删除添加的提交动作,不是以相对路径提交的,load时报路径出错。再次修改dump文件,把涉及到绝对路径的地方,修改成trunk目录下,即可解决该错误。
4.其他操作
命令:svndumpfilter
该命令用于过滤dump文件中的某些文件夹,以得到所需要的工程文件。在我们当前版本库中还不需要这个操作。
经以上操作,已将旧版本库导入到trunk目录下。经对比验证,新库跟旧版本库工程内容完全一致,操作成功!
发表评论
要发表评论,您必须先登录。