当你使用一个状况不佳的网络时,访问互联网上的SVN版本库是一件极其痛苦的事情。此时,可以考虑为远程版本库做一个本地镜像。然后,所有操作都在本地的版本库上进行,在空闲时进行两个版本库之间的同步。幸运的是,SVN已经提供了相应的功能。
第一步,在本地建立一个新的版本库:
svnadmin create D:\test
第二步,创建钩子文件pre-revprop-change.bat(windows环境,这里是D:\test\hooks\pre-revprop-change.bat)。文件中只需要一行内容即可“exit 0”。
第三步,初始化镜像(同步)操作:
svnsync init file:///D:/test
(如果需要用户名/密码,则按提示输入)
第四步,执行镜像(同步)操作:
svnsync sync file:///D:/test
(如果需要用户名/密码,则按提示输入)
Update (2010-04-10):
1. 如果在同步过程中出现了网络中断等异常,可能会引起同步中止。当下次重新同步时,会提示错误“svnsync: Couldn't get lock on destination repos after 10 attempts”。此时手动删除锁:
svn propdel svn:sync-lock --revprop -r0 file:///D:/test
Update (2010-04-11):
1. 在镜像某个SVN源时,遇到错误“svnsync: 不能接受属性 “svn:log”,因为它的编码不是 UTF-8”。原因是,从SVN1.6开始,SVN强制要求log等信息用UTF-8编码,而在1.6之前这不是强制的。因此,有些SVN源可能使用了其它编码。此时,当使用SVN1.6+来镜像这些源时就会遇到前面的错误。目前还没有找到解决办法。只好把SVN降低到1.5,此时,这个问题暂时被绕过了。但又遇到了新问题(如下)。
2. 在使用SVN1.5.7进行同步时,在同步了百个左右的版本时会遇到错误“svnsync: 方法 PROPFIND 失败于 “/svn/ntop”: SSL negotiation failed: SSL error: parse tlsext ()”。遇到错误后,再次执行svnsync命令时,能够继续进行。但运行一段时间后,又会重复遇到这个错误。目前不知道如何解决,但有一个绕过的方法:写一个简单的脚本,执行svnsync命令,如果命令执行失败,则重新执行,直到执行成功。
阅读(1707) | 评论(0) | 转发(0) |