首页 » 系统运维 » SVN » 正文

SVN迁移总结


需求1:现有SVN下分别有A和B两个仓库,需要将这两个仓库合并到C仓库下并保留各自的版本信息。


实现:先将两个仓库单独dump到文件,然后再将这两个dump文件load到同一个C仓库中

svnadmin dump /data/resources/svndata/svn/a/ > /tmp/a.dump

svnadmin dump /data/resources/svndata/svn/b/ > /tmp/b.dump


在c仓库下分别创建a和b两个文件夹,再分别两个dump文件导入到各自的文件夹中:

svnadmin load /data/resources/svndata/svn/c/ –parent-dir a < /tmp/a.dump

svnadmin load /data/resources/svndata/svn/c/ –parent-dir b < /tmp/b.dump


–parent-dir 表示指定导入到仓库下的哪个子目录,如上表示将a.dump导入到c仓库下的a目录中


需求2:将版本库A目录下的abc 即 /A/abc 移动到新的版本库B下并保留版本信息。

实现:先将整个版本库A dump出来,再利用svndumpfilter过滤出要导出的abc文件夹,最后将过滤出的abc导入到版本库B中

如下:

# svnadmin dump /data/resources/svndata/svn/A/ > /tmp/A.dump

# cat /tmp/A.dump | svndumpfilter include abc > /tmp/abc.dump

# svnadmin create /data/resources/svndata/svn/B

# svnadmin load /data/resources/svndata/svn/B/ < /tmp/abc.dump 


错误处理:

当执行svndumpfilter 时可能会出现:

svndumpfilter: Invalid copy source path '/Alex' 

它需要包含 /Alex 目录,此时不管你在导入新的版本库时是否需要包含Alex目录,在命令里都给加上,命令如下:

# cat /tmp/A.dump | svndumpfilter include abc “/Alex” > /tmp/abc.dump


此解决方案来自:http://stackoverflow.com/questions/9261625/svndumpfilter-fails-with-invalid-copy-source-path-error 

 

 

需求3:将版本库A目录下的abc的子目录ddd 即 /A/abc/ddd 移动到新的版本库B下并保留版本信息。

实现:实现方式和需求2一致。

# svnadmin dump /data/resources/svndata/svn/A/ > /tmp/A.dump

# cat /tmp/A.dump | svndumpfilter include '/abc/ddd' > /tmp/ddd.dump

# svnadmin create /data/resources/svndata/svn/B

# svnadmin load /data/resources/svndata/svn/B/ < /tmp/ddd.dump 

  

可能遇到的错误:

当执行最后一步svnadmin load的时候出现以下错误:

svnadmin: File not found: transaction '335-9b', path 'abc/ddd'

解决办法:

先将B checkout出来,然后再创建abc目录进行提交,然后再次执行svnadmin load

# svn chekcout http://192.168.1.9/svn/B /tmp/B

# mkdir /tmp/B/abc

# svn add /tmp/B/abc

# svn ci -m "temp dir" /tmp/B/abc

# svnadmin load /data/resources/svndata/svn/B/ < /tmp/ddd.dump 

 


当 svn ci -m "temp dir" /tmp/B/abc 可能会遇到的问题:

svn: Can't move '/data/resources/svndata/svn/B/db/txn-protorevs/10090-7sc.rev' to '/data/resources/svndata/svn/B/db/revs/10/10091': Permission denied

解决办法:

#chown -R apache.apache /data/resources/svndata/svn/B/

  

解决方案参考:

http://stackoverflow.com/questions/2359448/svnadmin-load-from-dumpfile-causes-file-not-found-error-help

http://witcher42.me/blog/2012/06/01/svn/


  

  

  


svn-square.jpg

发表评论

27 − = 22